2016-06-10 698 views
0

我对python非常陌生,目前正在尝试以稍微不同的方式组织我的tkinter应用程序。我试图使用类来使应用程序更加模块化,并且能够在应用程序中的多个位置使用类中的方法。这里是我有的更新的代码:Python,使用tkinter如何自定义UI组件的类显示?

from tkinter import * 


class Application(Frame): 

    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.pack() 
     self.createWidgets() 

     self.QUIT.pack(side=LEFT) 
     self.hi_there.pack(side=RIGHT) 

     Frame.__init__(self, master) 
     self.pack() 
     self.createAnotherWidget() 

     self.title_label.pack(side=LEFT) 
     self.title_entry.pack(side=RIGHT) 

    def say_hi(self): 
     print("hi there, everyone!") 

    def createWidgets(self): 
     self.QUIT = Button(self) 
     self.QUIT["text"] = "QUIT" 
     self.QUIT["fg"] = "red" 
     self.QUIT["command"] = self.quit 

     self.hi_there = Button(self) 
     self.hi_there["text"] = "Hello", 
     self.hi_there["command"] = self.say_hi 


    def createAnotherWidget(self): 
     self.title_label = Label(self) 
     self.title_label["text"] = "Title: " 
     self.title_entry = Entry(self) 

    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.pack() 
     self.createWidgets() 
     self.createAnotherWidget() 

root = Tk() 
app = Application(master=root) 
app.mainloop() 
root.destroy() 

这运行没有错误,但没有在窗口中显示。我如何定制这些方法的代码在渲染时将放置在哪里?对于这个例子,我只是想的createAnotherWidgetcreateWidgets

+0

如果你正在做任何潜在的大规模的tkinter应用程序(有多个框架或具有超过4个小工具),我会研究.grid函数的工作原理。如果你把它用于你的整个程序,包装是非常混乱的,以便跟踪。祝你好运 –

回答

0

一种解决方案,以显示下面的两个按钮是有呼叫者负责调用各个部件packgrid。这要求您以某种方式保存对小部件的引用,例如对象的属性。您已经为一些小部件执行此操作,但不能用于其他部件。你需要保持一致。

通过电话从功能转向pack()和你的__init__这样做:

def __init__(self, master=None): 
    Frame.__init__(self, master) 
    self.pack() 
    self.createWidgets() 
    self.createAnotherWidget() 

    self.QUIT.pack(...) 
    self.hi_there.pack(...) 
    self.title_label.pack(...) 
    self.title_entry.pack(...) 

当然,你需要修改createAnotherWidget保存到小部件引用。

问题的关键是,创建部件和屏幕上铺设了窗口小部件是应当分别解决两个单独的问题。


这就是说,有一些功能可以创建多个小部件,这些小部件被设计为由其他功能缝合在一起。

更常见的模式是函数创建相关的小部件,并管理相关小部件本身的布局。这样调用者只需要担心组织小部件组而不是一堆单独的小部件。

例如,您可能有一个创建工具栏的函数。另一个用滚动条创建主区域。另一个功能会创建一个页脚。另一种是用一堆标签和输入小部件创建一个表单。另一个创建标签/条目组合。等等。

+0

嗨@Bryan Oakley,谢谢你的帮助。我一直在研究它一段时间,并已经对代码进行了一些修改。我已经在我的问题上更新了我目前的内容。该窗口目前没有显示任何内容。另外,我不明白我在这个答案的最后一段如何处理你提到的内容。这听起来像是正确的做法,但我不确定如何去做。 再次感谢! – Jaromjj

+0

@Jaromij:你没有做我的例子的后半部分。 –

+0

感谢您的帮助。我整合了你的建议,并且从其他研究中学到了一些其他的东西,并让所有的工作都得到了发挥谢谢您的帮助。 – Jaromjj

相关问题