Python3 tkinter多个窗口和小部件

时间:2016-03-09 23:42:55

标签: python user-interface tkinter widget ttk

#Home Window
class Window1(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.initUI()

#Menu Bar Widgets
#<---------------------------------------------------->
    #Port Scanner Window Code
    def portscanner(self):
        self.newWindow = tk.Toplevel(self.master)
        self.app = Window2(self.newWindow)


    def initUI(self):
        self.parent.title("Multipurpose Security Tool")

        menubar = Menu(self.parent) 
        self.parent.config(menu=menubar)


    #Capture Menu Code
    #<----------------------------------------------------->
        captureMenu = Menu(menubar, tearoff=0,)

        #Submenu Send Packet
        #<----------------------------------------------------->
        submenu = Menu(captureMenu, tearoff=0)
        submenu.add_command(label="Send TCP Packet")
        submenu.add_command(label="Send UDP Packet")
        captureMenu.add_cascade(label="Send Packet", menu=submenu, underline=0)
        captureMenu.add_separator()
        #<----------------------------------------------------->
        #Regular Menu Widgets under Capture
        captureMenu.add_command(label="TCP Packet Analyzer")
        captureMenu.add_separator()
        captureMenu.add_command(label="UDP Packet Analyzer")
        captureMenu.add_separator()
        captureMenu.add_command(label="Port Scanner",command=self.portscanner)
        captureMenu.add_separator()
        captureMenu.add_command(label="Whois Lookup")
        menubar.add_cascade(label="Capture", menu=captureMenu)
    #<----------------------------------------------------->

    def showMenu(self, e):
        self.menu.post(e.x_root, e.y_root)

    #Exit Code on MenuBar
    def onExit(self):
        quitquestion = tkinter.messagebox.askquestion("Quit","Are you sure you want to quit?")
        if quitquestion == "yes":
            self.quit()

    #New Code on MenuBar
    def new(self):
        python = sys.executable
        os.execl(python, python, * sys.argv)



#Port Scanner
class Window2(Frame):
   def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.initUI2()

这是我试图放置小部件的框架,但是当我运行它时它什么也没做。我正在使用PyCharm作为我的编辑。尝试制作小部件,以便用户可以与之交互。我想制作一个输入框和一个包含文本&#34; run&#34;的按钮。它在调试器中没有显示任何内容。

   def initUI2(self):
       self.frame = tk.Frame(self.master)
       self.parent.title("Port Scanner")
       self.parent.geometry("500x300+400+200")
       self.runbutton = Button(self,text="Run")
       self.runbutton.pack()



#Windows Settings
def main():
#<----------------------------------------------------->
    root = Tk()
    root.geometry("500x300+400+100")
    app = Window1(root)
    #Page 1 and Page 2 Tab
    root.mainloop()
#<----------------------------------------------------->

if __name__ == '__main__':
    main()

2 个答案:

答案 0 :(得分:0)

GUI的全部内容都在窗口app内。但是,您从未使用包,地点或网格将app放在屏幕上,因此它仍然不可见。

由于app似乎是根窗口中唯一的小部件,您可能希望在调用mainloop之前添加此代码:

app.pack(fill="both", expand=True)

答案 1 :(得分:0)

portscanner()方法中,使用pack()在屏幕上显示self.app

def portscanner(self):
    self.newWindow = tk.Toplevel(self.master)
    self.app = Window2(self.newWindow)
    self.app.pack()