tkinter应用程序窗口python的pararell实例

时间:2017-09-21 07:45:42

标签: python python-2.7 tkinter

我想创建一些简单的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()

1 个答案:

答案 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()