виджеты tkinter в моих классах не отображаются - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь написать код, который содержит несколько страниц и может переключаться при нажатии кнопки.изначально он работал, но мои виджеты не отображаются, и нет ни предупреждения, ни сообщения об ошибке.Во-вторых, в чем разница между использованием tk и 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()

1 Ответ

0 голосов
/ 24 декабря 2018

Оказывается, проблема была в том, что вы использовали place().Используйте диспетчер геометрии grid.Использование import tkinter as tk и from 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...