所以我可以用类做一些C ++控制台的东西(我觉得没什么太花哨的东西),只是从Python开始(很棒的语言,就像C ++一样没有后顾之忧)和Tkinter。
问题在于,我并不知道一般来说如何构建具有GUI的程序。我知道你必须将界面与内部工作分开,但这就是它。作为一个例子,我正在开发一个将Excel表转换为LaTeX表的小应用程序,到目前为止,我有这个:
from Tkinter import *
class ExcelToLateX:
def __init__(self,master):
self.convert = Button(master,text="Convert",command=self.Conversion)
self.convert.pack(side=BOTTOM,fill=X)
self.input=Input(master,40)
self.output=Output(master,40)
def Conversion(self):
self.output.Write(self.input.Read())
class Input:
def __init__(self,master,x):
self.u=Text(master,width=x)
self.u.pack(side=LEFT)
self.u.insert(1.0,"Paste Excel data here...")
def Read(self):
return self.u.get(1.0,END)
class Output:
def __init__(self,master,x):
self.v=Text(master,width=x)
self.v.pack(side=RIGHT)
self.v.insert(1.0,"LaTeX code")
def Write (self,input):
self.input=input
if self.v.get(1.0,END)=="":
self.v.insert(1.0,self.input)
else:
self.v.delete(1.0,END)
self.v.insert(1.0,self.input)
#Test script
root=Tk()
Window=ExcelToLateX(root)
root.mainloop()
所以我有两个可以读写东西的Text小部件和一个(现在)空转换类,它将使用Excel表格并喷出LaTeX代码。我不知道这是否可行(所以任何意见/提示都表示赞赏)。
总之,我有两个问题:
是否有任何广泛认可的消息来源提供有关如何构建带有GUI的程序的信息? (最好是Python和Tkinter,因为我正在做的就是知道,虽然它可能更通用(跨语言))
当前的应用程序在结构方面是否有用,如果不是,那么我可以改进哪些经验法则?
答案 0 :(得分:2)
我只想在帽子上写一些简短的评论。我没有Tkinter的经验,所以我的知识来自PyQt4经验。
现在,您通过将单个窗口小部件作为成员属性来为您的类使用合成。这显然可以工作,但有用的模式是子类化GUI小部件,然后通过向该类添加更多子小部件和父级来组成布局。请参阅我发现的随机Tkinter教程链接中的示例:http://zetcode.com/tutorials/tkintertutorial/
class Example(Frame):
def __init__(self, parent):
super(Example, self).__init__(parent)
...
就像一般的python约定一样,你应该尝试坚持使用大写的类名,并使用camelCase或under_score来获取类实例方法和变量。正如您所拥有的那样,您正在使用实例资金(Window =
)和方法(Write
)
此外,如果您不打算成为Tkinter小部件的子类,请确保至少通过object
的子类化来使用新式类:http://realmike.org/blog/2010/07/18/introduction-to-new-style-classes-in-python/
您可能还希望嵌套代码的最后一部分,在经典的python习惯用法中运行事件循环:
if __name__ == "__main__":
root=Tk()
window = ExcelToLateX(root)
root.mainloop()
如果您要将此模块作为库导入另一个应用程序,它会阻止您的应用立即执行。