【发布时间】:2019-06-18 18:21:59
【问题描述】:
按照以下 cmets 更新代码
我正在努力让我的顶层在按钮按下时打开!
我已经扫描了此处的代码,但似乎无法获得有效的解决方案。我最近的错误是:
AttributeError: '_tkinter.tkapp' 对象没有属性 'unavail'
from tkinter import *
from ScheduleApi import flightData
import config
from itinerary import fltCreate
class FrontEnd:
def __init__(self, master):
self.master = master
master.title("A simple GUI")
self.label = Label(master, text="This is our first GUI!")
self.label.grid()
self.greet_button = Button(master, text="Create Itinerary", command=self.ItinBuilder)
self.greet_button.grid(row=1)
self.close_button = Button(master, text="Close", command=master.quit)
self.close_button.grid(row=2)
def greet(self):
print("Greetings!")
def ItinBuilder(self):
self = Toplevel(self.master)
self.title ("Please build your itinerary")
self.addflt_button = Button(self.master, text="add flights", command=fltCreate)
self.addflt_button.grid(row=1)
self.addfhtl_button = Button(self.master, text="add hotel", command=self.master.unavail)
self.addflt_button.grid(row=1, column=1)
self.addfmsc_button = Button(self.master, text="add misc item", command=self.master.unavail)
self.addflt_button.grid(row=2, column=1)
self.prvitin_button = Button(self.master, text="preview", command=self.master.unavail)
self.addflt_button.grid(row=2, column=1)
def unavail(self, Toplevel):
print("Function not yet available.")
root = Tk()
my_gui = FrontEnd(root)
root.mainloop()
【问题讨论】:
-
您的
FrontEnd类不是从任何 Tkinter 类派生的,因此不是任何类型的小部件。这是构建 Tkinter 程序的一种完全有效的方法,但这确实意味着您不能将此类的实例作为您创建的任何小部件的第一个参数传递(例如,就像您对self.addflt_button所做的那样) - 您有传递一个实际的小部件,self.newWindow也许。 -
抱歉,我不明白。当我运行 ItinBuilder 时,我的第一行是传递小部件 self.newWindow = Toplevel(self.master)
-
@user3207324,您需要将有效的 tkinter 小部件作为第一个参数传递给任何 tkinter 小部件,这意味着将
self.master或self.newWindow传递给在ItinBuilder函数中创建的小部件,而不是 @987654328 @。在您的情况下,当您将self传递给它时,它会尝试将FrontEnd对象视为 tkinter 小部件并失败。 -
感谢您的帮助,我似乎快到了。我似乎到了那里,我还有 2 个问题仍然存在(对不起,我是一个完整的 tkinter 新手!)即使它是在 FrontEnd 类中定义的,ItinBuilder 仍在努力解决问题。此外,它现在至少可以创建添加航班按钮,但它将按钮放置在主 GUI 中,而不是新窗口中。更新代码如下: [[...] def ItinBuilder(self): self = Toplevel(self.master) self.title ("Please build your itinerary")]
-
以上代码更新
标签: python user-interface tkinter tkinter-layout