我的类中的tkinter小部件没有显示

2024-04-26 12:25:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写一个代码,其中包含多个页面,可以切换到一个按钮时,点击。它最初工作,但我的小部件没有显示,也没有警告或错误消息。第二,使用传统知识和tk.tk?你知道吗

from tkinter import *
import tkinter as tk

class moreTab(tk.Tk):
    def __init__(self):
        Tk.__init__(self)
        self.geometry("1200x600")
        container = Frame(self, bg='#c9e3c1')
        container.pack(side = "top", fill = 'both', expand = True)
        container.grid_rowconfigure(0, weight = 1)
        container.grid_columnconfigure(0, weight = 1)
        self.frames = {}
        for q in (pageone, widget):
            frame = q(container,self)
            self.frames[q] = frame
            frame.place(x= 0,y = 0)
        self.raise_frame(pageone)
    def raise_frame(self,cont):
        frame = self.frames[cont]
        frame.tkraise()

class widget(Frame):
    def __init__(self, master, control):
        Frame.__init__(self, master)

        lab = tk.Label(self, text="main page")
        lab.place(x = 10, y = 40)
        but = tk.Button(self, text='visit start page', command=lambda: 
control.raise_frame(pageone))
        but.place(x = 10, y = 70)
class pageone(Frame):
    def __init__(self, master, control):
        Frame.__init__(self,master)
        lab = Label(self, text = 'welcome to Game Analysis')
        lab.place(x = 10, y = 10)
        but = Button(self, text = "Start", command  = lambda: 
control.raise_frame(widget))
        but.place(x = 10, y = 20)

app = moreTab()
app.mainloop()

Tags: textselfmasterinitcontainerdeflabplace
1条回答
网友
1楼 · 发布于 2024-04-26 12:25:28

问题是您使用的是place()。使用grid几何图形管理器。同时使用import tkinter as tkfrom tkinter import *是没有意义的。使用一个并保持一致。如果您使用后者,您就拥有了所有可用的东西,因此您将编写,比如Button(...)。但如果使用前者,则必须引用每个小部件,如tk.Button(...)。你知道吗

import tkinter as tk

class moreTab(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.geometry("1200x600")
        container = tk.Frame(self, bg='#c9e3c1')
        container.pack(side = "top", fill = 'both', expand = True)
        container.grid_rowconfigure(0, weight = 1)
        container.grid_columnconfigure(0, weight = 1)
        self.frames = {}
        for q in (pageone, widget):
            frame = q(container, self)
            self.frames[q] = frame
            frame.grid(row=0, column=0, sticky='nsew')
        self.raise_frame(pageone)

    def raise_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

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

        lab = tk.Label(self, text="main page")
        lab.grid(row=0, column=0, padx=10, pady=10)

        but = tk.Button(self, text='visit start page', command=lambda: control.raise_frame(pageone))
        but.grid(row=1, column=0, padx=10, pady=10)

class pageone(tk.Frame):
    def __init__(self, master, control):
        tk.Frame.__init__(self, master)
        lab = tk.Label(self, text = 'welcome to Game Analysis')
        lab.grid(row=0, column=0, padx=10, pady=10)
        but = tk.Button(self, text = "Start", command = lambda: control.raise_frame(widget))
        but.grid(row=1, column=0, padx=10, pady=10)

app = moreTab()
app.mainloop()

相关问题 更多 >