gpt4 book ai didi

python - 这是 tkinter 中的不良编程习惯吗?

转载 作者:太空宇宙 更新时间:2023-11-04 01:14:36 25 4
gpt4 key购买 nike

我正在学习使用 tkinter 编写事件驱动程序,并且正在使用 Fredrik Lundh 的优秀教程。在那里,他提到最好为框架定义一个类 (App) 并将程序作为该类的实例运行,而不是仅仅这样启动它:

root = Tk()
w = Label(root, text = 'hello, world!')
w.pack()
root.mainloop()

我有 3 个问题:

  1. 以这种更简单的方式来做是不是不好的编程习惯?

  2. 如果我确实定义了一个类,并将回调函数绑定(bind)到小部件,那么这些函数是否都必须在类本身中?即,我能否在类里面设置一个显示 go 的按钮,当我单击该按钮时,它会运行一个在类外定义的精心设计的例程?

  3. 将结果生成到类外并在类内显示是否是一种不好的做法?

基本上,我可以通过跳进跳​​出类来使程序正常工作,但我不确定这样做是否是不好的做法(一个全局变量)。

最佳答案

  1. 随着您的应用程序变大,您会希望使用类。不必全神贯注于整个代码,您可以一次专注于一个类。
  2. 您不限于只使用类中的方法。您的代码可能会利用外部函数或类来获取信息,甚至修改提供给它们的参数。
  3. 不,这可能是显示信息的方式。或者,您可以使用文件来输出结果,如果存在,则可以打印到控制台。

示例:

import tkinter
import random

class Application(tkinter.Frame):

@classmethod
def main(cls):
root = tkinter.Tk()
frame = cls(root)
frame.grid()
root.mainloop()

def __init__(self, master=None, cnf={}, **kw):
super().__init__(master, cnf, **kw)
self.w = tkinter.Label(self, text='Hello, world!')
self.w.grid()
self.v = tkinter.Button(self, text='Press Me', command=self.click)
self.v.grid()
self.u = tkinter.Button(self, text='Me Too!',
command=lambda: external_mutator(self.w))
self.u.grid()

def click(self):
self.w['text'] = external_function(3)

def external_function(ndigits):
return round(random.random(), ndigits)

def external_mutator(widget):
widget['text'] = external_function(6)
print('Hello to you too!') # shown on console if present

if __name__ == '__main__':
Application.main()

main 类方法的替代方法:

import tkinter
import random

class Main(tkinter.Tk):

def __init__(self, screenName=None, baseName=None, className='Tk',
useTk=1, sync=0, use=None):
super().__init__(screenName, baseName, className,
useTk, sync, use)
frame = Application(self)
frame.grid()
self.mainloop()

class Application(tkinter.Frame):

def __init__(self, master=None, cnf={}, **kw):
super().__init__(master, cnf, **kw)
self.w = tkinter.Label(self, text='Hello, world!')
self.w.grid()
self.v = tkinter.Button(self, text='Press Me', command=self.click)
self.v.grid()
self.u = tkinter.Button(self, text='Me Too!',
command=lambda: external_mutator(self.w))
self.u.grid()

def click(self):
self.w['text'] = external_function(3)

def external_function(ndigits):
return round(random.random(), ndigits)

def external_mutator(widget):
widget['text'] = external_function(6)
print('Hello to you too!') # shown on console if present

if __name__ == '__main__':
Main()

关于python - 这是 tkinter 中的不良编程习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25454065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com