我在编写一个继承自tkinter的Toplevel对话框的类的构造函数时遇到了麻烦。我从另一个本身继承自Frame的类调用它。我遇到的问题是我所提出的代码的一个有趣的副作用。当Toplevel对话框被示例化时,我得到了一个额外的调用Frame的示例。我只是想问一下,是否有人可以告诉我如何在自定义Toplevel类的构造函数中调用super。这是在Python框架中。我目前拥有的整个代码如下:
from tkinter import *
from tkinter import ttk
class App(Frame):
dialog = None
def __init__(self, root):
super(App, self).__init__(root)
self.root = root
self.create_widgets()
def create_widgets(self):
self.grid(row=3, column=1)
self.t1 = Text(root, wrap="word")
self.t1.grid(row=0, column=0, rowspan=2, sticky="nsew")
self.b1 = Button(root, text=" Create ", command=self.show_dialog)
self.b1.grid(row=2, column=0, pady=10)
root.rowconfigure(0, weight=3)
root.columnconfigure(0, weight=1)
def show_dialog(self):
self.dialog = Toplevel(root)
self.dialog.title("Child")
# Place child window over the application window
x = self.root.winfo_x() + self.root.winfo_width()//2 - \
self.dialog.winfo_width()//2
y = self.root.winfo_y() + self.root.winfo_height()//2 - \
self.dialog.winfo_height()//2
self.dialog.geometry(f"100x75+{x}+{y}")
Dialog(self.t1, self.dialog)
class Dialog(Toplevel):
def __init__(self, t1, top):
super().__init__(top) # This doesn't work !!!
self.top = top
self.t1 = t1 # Text widget is passed at creation
self.widget()
def widget(self):
self.e1 = Entry(self)
self.e1.grid(row=0, column=0)
self.b1 = Button(self, text="Submit", command=self.on_submit)
self.b1.grid(row=1, column=0, pady=15)
# self.rowconfigure(0, weight=1)
def on_submit(self):
self.t1.insert("insert", self.e1.get())
def quit(self):
self.top.destroy()
root = Tk()
root.title("Paremt")
root.geometry("400x250+400+200")
app = App(root)
app.mainloop()
我已经更新了这篇文章,展示了整个列表。我也试图从下面的评论中改进它。我仍然得到了副作用。现在它似乎示例化了两个顶级窗口,而不仅仅是类。
1条答案
按热度按时间5ktev3wc1#
感谢所有的帮助,我在将Java中的对象知识应用到Python/Tk范式时遇到了困难。现在看起来一切都很好。更新的清单如下。