简体   繁体   English

Tkinter(python 2.7.2)需要帮助

[英]Tkinter (python 2.7.2) Help needed

I'm trying to make my first GUI program. 我正在尝试制作我的第一个GUI程序。 The problem is, that I can't figure out how to make a main menu, which would switch to one of the programs after clicking a button. 问题是,我不知道如何制作主菜单,单击一个按钮后该主菜单会切换到程序之一。

#Dev by Mkee
from Tkinter import *
import tkMessageBox
#Main Stuff
app = Tk()
app.title("Mkee's Tools")
app.geometry('300x200')

#modules
class Programs:
    def Shuffle():
        app2 = Tk()
        app2.title("Shuffle")
        app2.geometry('300x200')
        app2.mainloop()


#end of modules

labelText = StringVar()
labelText.set('')
label1 = Label(app, textvariable=labelText, height=4)
label1.pack()

button1 = Button(app, text='Shuffle', width=30, command=Programs.Shuffle)
button1.pack(side='right', padx=5,pady=1)


app.mainloop()

I know that I'm doing it wrong. 我知道我做错了。 I just have no idea how to do it, So i gave it a try of how could it be. 我只是不知道该怎么做,所以我尝试了一下。 Please help me. 请帮我。

  1. You could call pack_forget() to hide widgets, and (later) pack to show them again: 您可以调用pack_forget()来隐藏小部件,并(稍后) pack以再次显示它们:

  2. Tkinter is singled-threaded, and mainloop runs the main event loop. Tkinter是单线程的,并且mainloop运行主事件循环。 Therefore you shouldn't call mainloop twice. 因此,您不应调用mainloop两次。


#Dev by Mkee
import Tkinter as tk
import sys

class Shuffle(object):
    def __init__(self,master=None):
        self.master=master
        self.text=tk.Text(master)
    def hide(self):
        self.text.pack_forget()
    def show(self):
        self.text.pack(side=tk.LEFT, padx=5, pady=5)

class Buttons(object):
    def __init__(self,master=None):
        self.master=master
        self.red = tk.Button(self.master, text="Red", bg="red", fg="white")
        self.green = tk.Button(self.master, text="Green", bg="green", fg="black")
        self.blue = tk.Button(self.master, text="Blue", bg="blue", fg="white")
    def hide(self):
        self.red.pack_forget()
        self.green.pack_forget()
        self.blue.pack_forget()                
    def show(self):
        self.red.pack(side=tk.LEFT,expand=tk.YES,fill=tk.BOTH)
        self.green.pack(side=tk.LEFT,expand=tk.YES,fill=tk.BOTH)
        self.blue.pack(side=tk.LEFT,expand=tk.YES,fill=tk.BOTH)

class MainApp(object):
    def __init__(self,master=None):
        self.master=master
        app=self.app=tk.Tk()
        app.title("Mkee's Tools")
        app.geometry('300x200')
        self.shuffle=Shuffle(master)
        self.buttons=Buttons(master)
        self.current=None
        menubar=tk.Menu(app)
        program_menu=tk.Menu(menubar)
        program_menu.add_command(label='Shuffle',
                                 command=lambda: self.show(self.shuffle))
        program_menu.add_command(label='Buttons',
                                 command=lambda: self.show(self.buttons)) 
        program_menu.add_command(label='Quit',command=sys.exit) 
        menubar.add_cascade(label='Programs', menu=program_menu)
        app.config(menu=menubar)
    def show(self,obj):
        if self.current != obj:
            try: self.current.hide()
            except AttributeError: pass
            self.current=obj
            obj.show()

def main():
    m=MainApp()
    m.app.mainloop()

if __name__=='__main__':
    main()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM