【发布时间】:2018-11-08 20:32:28
【问题描述】:
我正在尝试制作具有多个帧的 tkinter 应用程序。
在我的代码中,在settings 类中的任何声明前面添加self.(如self.name)意味着窗口不会打开。为什么?
class app(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self._frame = None
self.switchFrame(settings)
def switchFrame(self, frame_class):
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.pack()
class settings(tk.Frame):
def __init__(self, master):
tk.Frame.__init__(self, master)
lengthSliderTitle = "Set the race length in metres"
tk.Label(master, text = lengthSliderTitle).grid(column= 0, row = 1)
raceLengthSlider = tk.Scale(master, from_=1000, to=10000, length= 600, tickinterval = 1000, orient=tk.HORIZONTAL)
raceLengthSlider.grid(column = 0, row = 2)
racersNumSliderTitle = "Set the amount of racers"
tk.Label(master, text = racersNumSliderTitle).grid(column = 0, row = 4)
racersNumSlider = tk.Scale(master, from_= 2, to= 50, length = 600, tickinterval = 5, orient=tk.HORIZONTAL)
racersNumSlider.grid(column= 0, row = 5)
finishScreen1btn = tk.Button(master, text = "Done", command = self.finishScreen1)
finishScreen1btn.grid(column = 0, row = 6)
def finishScreen1():
currentRace.length = raceLengthSlider.get()
currentRace.numRacers = racersNumSlider.get()
master.switchFrame(animalsettings).pack()
switchFrame 是主应用程序用来在帧之间切换的东西。每个框架都有一个类似于settings 类的结构。
finishScreen1btn = tk.Button(master, text = "Done", command = self.finishScreen1) 行是使窗口不出现的原因。发生的情况是 Python 终端没有打印任何错误,但也没有打开任何窗口。
【问题讨论】:
-
请勿将代码发布为图片
-
@Norrius 修复了这个问题。由于某种原因,Mac 上的 IDLE 不允许复制和粘贴。
-
你的代码真的是这样缩进的吗?有很多缩进错误。
-
在纠正缩进并为
finishScreen1btn创建回调函数后,程序运行并显示窗口。将.self添加到settings()中的名称后,窗口将像以前一样显示。能否请您发布产生错误的代码。 -
@figbeam 看来我在制作
finishScreen1btn时使用了错误的回调函数名称。回调函数是finishScreen1,所以我编辑了这个问题。另外,我在我的问题中添加了产生错误的代码。
标签: python macos user-interface tkinter