簡體   English   中英

_tkinter.TclError: 錯誤的屏幕距離“.!startpage”

[英]_tkinter.TclError: bad screen distance ".!startpage"

from pathlib import Path
import tkinter as tk

class SampleApp(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self._frame = None
        self.switch_frame(StartPage)

    def switch_frame(self, frame_class):
        """Destroys current frame and replaces it with a new one."""
        new_frame = frame_class(self)
        if self._frame is not None:
            self._frame.destroy()
        self._frame = new_frame
        self._frame.place()

class StartPage(tk.Frame):
    def __init__(self, master):
        tk.Frame.__init__(self, master)

        OUTPUT_PATH = Path(__file__).parent
        ASSETS_PATH = OUTPUT_PATH / Path("MENUASSETS")

        def relative_to_assets(path: str, ) -> Path:
            return ASSETS_PATH / Path(path)

        canvas = tk.Canvas(self,bg="#F7F7F7",height=470,width=600,bd=0,highlightthickness=0,relief="ridge")
        canvas.place(x=0, y=0)
        canvas.create_rectangle(0.0,0.0,396.0,470.0,fill="#000000",outline="")

        self.button_image_1 = tk.PhotoImage(file=relative_to_assets("button_admin.png"))
        button_1 = tk.Button(self,image=self.button_image_1,borderwidth=0,highlightthickness=0,command=lambda: master.show_frame(userinterface),relief="flat")
        button_1.place(x=70.0,y=66.0,width=256.0,height=74.0)

        self.button_image_2 = tk.PhotoImage(file=relative_to_assets("button_user.png"))
        button_2 = tk.Button(self,image=self.button_image_2,borderwidth=0,highlightthickness=0,command=lambda: print("button_2 clicked"),   relief="flat")
        button_2.place(x=75.0,y=198.0,width=256.0,height=74.0)

        self.button_image_3 = tk.PhotoImage(file=relative_to_assets("button_vc.png"))
        button_3 = tk.Button(self,image=self.button_image_3,borderwidth=0,highlightthickness=0,command=lambda: print("button_3 clicked"),relief="flat")
        button_3.place(x=70.0,y=330.0,width=256.0,height=74.0)

        self.button_image_4 = tk.PhotoImage(file=relative_to_assets("button_mexit.png"))
        button_4 = tk.Button(self,image=self.button_image_4,borderwidth=0,highlightthickness=0,command=lambda: print("button_4 clicked"),relief="flat")
        button_4.place(x=462.0,y=415.0,width=77.0,height=36.0)

        canvas.create_text(self,13.0,424.0,anchor="nw",text="MAYA",fill="#000000",font=("Sora Regular", 27 * -1))

        self.image_image_1 = tk.PhotoImage(file=relative_to_assets("logo.png"))
        self.image1 = canvas.create_image(self,500.0,145.0,image=self.image_image_1)

錯誤:

_tkinter.TclError: bad screen distance ".!startpage"

您錯誤地將self傳遞給了兩行:

canvas.create_text(self,13.0,424.0,anchor="nw",text="MAYA",fill="#000000",font=("Sora Regular", 27 * -1))
...
self.image1 = canvas.create_image(self,500.0,145.0,image=self.image_image_1)

從他們中刪除self

canvas.create_text(13.0,424.0,anchor="nw",text="MAYA",fill="#000000",font=("Sora Regular", 27 * -1))
...
self.image1 = canvas.create_image(500.0,145.0,image=self.image_image_1)

由於place()用於在StartPage內布置小部件,因此它使StartPage大小為 1x1。

您可以指定根窗口的初始大小並告訴StartPage填充窗口,如下所示:

class SampleApp(tk.Tk):
    def __init__(self):
        super().__init__()
        self.geometry('600x480') # specify initial window size
        ...

    def switch_frame(self, frame_class):
        ...
        self._frame.place(x=0, y=0, relwidth=1, relheight=1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM