我想创建一些简单的tkinter python应用程序(如Windows上的StickyNotes),我已创建类 mainApplication ,我不知道如何通过简单地触发按钮创建另一个此实例将被显示为其他窗口(甚至多个窗口)的类。我知道如何为pushButton分配函数,以及其他简单的东西,但问题是这个pararell窗口显示。在此先感谢您的帮助。
class mainApplication(Frame):
_ids = count(0)
def __init__(self, parent):
""" """
self.id = next(self._ids)
Frame.__init__(self, parent)
self.parent = parent
self.parent.minsize(width=200,height=100)
self.parent.geometry(('%dx%d+%d+%d' % (200, 100, 1700, 0+self.id*100)))
self.initUI()
def initUI(self):
""" """
self.parent.title("a2l")
self.pack(fill=BOTH, expand=True)
style = Style()
style.configure("TFrame", background="#333")
frame1 = Frame(self, style="TFrame")
frame1.pack(fill=X)
self.lbl0 = Label(frame1, text="api", width=7, background="#333", foreground = "red")
self.lbl0.pack(side=TOP, padx=5, pady=5)
self.closeButton = Button(self, text="new", command = self.createNewInstance)
self.closeButton.pack(side=RIGHT, padx=5, pady=5)
#=======================================================================
# self.generateButton = Button(self, text="GENERATE", command = self.)
# self.generateButton.pack(side=RIGHT, padx=5, pady=5)
#=======================================================================
def createNewInstance(self):
y = mainApplication()
return y
if __name__ == "__main__":
root = Tk()
x = mainApplication(root).pack(side="top", expand=False)
Tk().mainloop()
答案 0 :(得分:0)
您不应该在一个带有tkinter的应用程序中创建多个Tk()
窗口。相反,tkinter提供了一个名为Toplevel
的小部件,它可以用于此类事情。
它会创建另一个窗口,该窗口可以存在于Tk()
窗口旁边,也可以与其他Toplevel
窗口小部件一起存在。
您可以使用它来创建一系列持久性窗口,其中包含您想要的任何文本或窗口小部件,包括Button
。
请参阅下面的示例进行演示:
from tkinter import *
class App:
def __init__(self, root):
self.root = root
self.top = [] #list to contain the Toplevel widgets
self.entry = Entry(self.root)
self.button = Button(self.root, text="Create window", command=self.command)
self.entry.pack()
self.button.pack()
def command(self): #called when button is pressed
self.top.append(Toplevel(self.root)) #adds new Toplevel to the list
Label(self.top[len(self.top)-1], text=self.entry.get()).pack() #Adds label equal to the entry widget to the new toplevel
root = Tk()
App(root)
root.mainloop()