回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>使用下面的代码,我可以将页面从第1页切换到第2页,从第2页切换到第3页,从第3页切换到第4页,但不能从第4页切换到第1页。你知道吗</p>
<p>它显示错误消息:</p>
<pre><code>Traceback (most recent call last):
File "C:\Python33\lib\tkinter\__init__.py", line 1489, in __call__
return self.func(*args)
File "F:\CCTV\test\Page4.py", line 29, in buttonLoginClicked
self.controller.show_frame(Page1)
NameError: global name 'Page1' is not defined
</code></pre>
<p>我想知道这是不是因为我不能切换到同一帧多次或我只是做错了什么。如果我把所有的类放在同一个页面上,似乎可以解决这个问题,但是我希望所有的类都放在不同的页面上。也许这和导入页面有关?这是我的代码的简化版本,有助于显示问题:</p>
<p>中央电视台:</p>
<pre><code>import tkinter as tk
from tkinter import ttk, messagebox
from Page1 import *
from Page2 import *
from Page3 import *
from Page4 import *
class CCTV(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
container = tk.Frame(self)
container.pack()
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (Page1, Page2, Page3, Page4):
frame = F(container, self)
self.frames[F] = frame
frame.grid(column=0, row=0, sticky="nsew")
self.openPage()
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
def openPage(self):
self.show_frame(Page1)
app = CCTV()
app.geometry("800x600")
app.mainloop()
</code></pre>
<p>第1页:</p>
<pre><code>import tkinter as tk
from tkinter import ttk, messagebox
from Page2 import *
class Page1(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.createView()
def createView(self):
inner_frame = tk.Frame(self)
inner_frame.pack(side="top", fill="none")
self.labelTitle = ttk.Label(inner_frame, text="Page 1")
self.buttonLogin = ttk.Button(inner_frame, text="Page 2", command=self.buttonLoginClicked)
self.labelTitle.grid(row=1, columnspan=4, pady=10)
self.buttonLogin.grid(row=2, columnspan=4, pady=10)
self.grid_rowconfigure(0, weight=1)
self.grid_rowconfigure(3, weight=1)
self.grid_columnconfigure(0, weight=1)
self.grid_columnconfigure(3, weight=1)
def buttonLoginClicked(self):
self.controller.show_frame(Page2)
</code></pre>
<p>第2页:</p>
<pre><code>import tkinter as tk
from tkinter import ttk, messagebox
from Page3 import *
class Page2(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.createView()
def createView(self):
inner_frame = tk.Frame(self)
inner_frame.pack(side="top", fill="none")
self.labelTitle = ttk.Label(inner_frame, text="Page 2")
self.buttonLogin = ttk.Button(inner_frame, text="Page 3", command=self.buttonLoginClicked)
self.labelTitle.grid(row=1, columnspan=4, pady=10)
self.buttonLogin.grid(row=2, columnspan=4, pady=10)
self.grid_rowconfigure(0, weight=1)
self.grid_rowconfigure(3, weight=1)
self.grid_columnconfigure(0, weight=1)
self.grid_columnconfigure(3, weight=1)
def buttonLoginClicked(self):
self.controller.show_frame(Page3)
</code></pre>
<p>第3页:</p>
<pre><code>import tkinter as tk
from tkinter import ttk, messagebox
from Page4 import *
class Page3(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.createView()
def createView(self):
inner_frame = tk.Frame(self)
inner_frame.pack(side="top", fill="none")
self.labelTitle = ttk.Label(inner_frame, text="Page 3")
self.buttonLogin = ttk.Button(inner_frame, text="Page 4", command=self.buttonLoginClicked)
self.labelTitle.grid(row=1, columnspan=4, pady=10)
self.buttonLogin.grid(row=2, columnspan=4, pady=10)
self.grid_rowconfigure(0, weight=1)
self.grid_rowconfigure(3, weight=1)
self.grid_columnconfigure(0, weight=1)
self.grid_columnconfigure(3, weight=1)
def buttonLoginClicked(self):
self.controller.show_frame(Page4)
</code></pre>
<p>第4页:</p>
<pre><code>import tkinter as tk
from tkinter import ttk, messagebox
from Page1 import *
class Page4(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.createView()
def createView(self):
inner_frame = tk.Frame(self)
inner_frame.pack(side="top", fill="none")
self.labelTitle = ttk.Label(inner_frame, text="Page 4")
self.buttonLogin = ttk.Button(inner_frame, text="Page 1", command=self.buttonLoginClicked)
self.labelTitle.grid(row=1, columnspan=4, pady=10)
self.buttonLogin.grid(row=2, columnspan=4, pady=10)
self.grid_rowconfigure(0, weight=1)
self.grid_rowconfigure(3, weight=1)
self.grid_columnconfigure(0, weight=1)
self.grid_columnconfigure(3, weight=1)
def buttonLoginClicked(self):
self.controller.show_frame(Page1)
</code></pre>