Tkinter(python 2.7.2)需要帮助

Tkinter(python 2.7.2)需要帮助,python,tkinter,python-2.7,Python,Tkinter,Python 2.7,我正在尝试制作我的第一个GUI程序。问题是,我不知道如何制作一个主菜单,在点击一个按钮后,它会切换到其中一个程序 #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()

我正在尝试制作我的第一个GUI程序。问题是,我不知道如何制作一个主菜单,在点击一个按钮后,它会切换到其中一个程序

#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()
我知道我做错了。我只是不知道怎么做,所以我试了一下怎么可能。请帮帮我

  • 您可以调用隐藏小部件,然后(稍后)
    pack
    要再次显示它们:

  • Tkinter是单线程的,
    mainloop
    运行主事件循环。因此,您不应该调用
    mainloop
    两次


  • 您可以调用隐藏小部件,然后(稍后)
    pack
    要再次显示它们:

  • Tkinter是单线程的,
    mainloop
    运行主事件循环。因此,您不应该调用
    mainloop
    两次



  • 这不是答案,但您是否看过更好的GUI工具包?PyQt4相当不错。@Blender:“更好”是主观的。Tkinter对大多数问题都很好,尤其是当一个人第一次学习的时候。对于我们这些拥有丰富经验的人来说,tkinter仍然是一个非常可行的选择。事实上,就在今天,我决定放弃我在wxPython做的一个项目,转而支持tkinter。Tkinter是现代的、支持良好的、跨平台的,并且非常容易使用。@Byran:当然,“更好”是主观的。我之所以建议使用PyQt4,是因为它绘制了看起来像本机的UI元素,而且(对我来说)比Tkinter更容易使用。这不是答案,但你看过更好的GUI工具包吗?PyQt4相当不错。@Blender:“更好”是主观的。Tkinter对大多数问题都很好,尤其是当一个人第一次学习的时候。对于我们这些拥有丰富经验的人来说,tkinter仍然是一个非常可行的选择。事实上,就在今天,我决定放弃我在wxPython做的一个项目,转而支持tkinter。Tkinter是现代的、支持良好的、跨平台的,并且非常容易使用。@Byran:当然,“更好”是主观的。我之所以建议使用PyQt4,是因为它绘制了看起来像本机的UI元素,而且(对我来说)比Tkinter更容易使用。谢谢,但这不是我想要的效果。我想得到的是,当你按下按钮时,“Shuffle”会在同一个窗口中打开,而不是弹出另一个窗口。实际上,菜单栏很好。但是有没有可能让它在同一个窗口而不是“弹出窗口”中运行?谢谢,但这不是我想要的效果。我想得到的是,当你按下按钮时,“Shuffle”会在同一个窗口中打开,而不是弹出另一个窗口。实际上,菜单栏很好。但是有没有可能让它在同一个窗口而不是“弹出窗口”中运行?
    #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()