使用tkinter在Python中创建动态命名的gui对象

时间:2018-03-09 13:34:29

标签: python button methods tkinter

我正在学习在Python 3.6.4中使用tkinter。我正在创建一个包含多个按钮实例的GUI。两个这样的例子是:

def createWidgets(self):
    # first button
    self.QUIT = Button(self)
    self.QUIT["text"] = "Quit"
    self.QUIT["command"] = self.quit
    self.QUIT.pack()

    # second button
    self.Reset  = Button(self)
    self.Reset["text"] = "Reset"
    self.Reset["command"] = "some other function, tbd"

我想学习的是如何抽象按钮的实例化,以便createWidgets方法中的每个实例都基于如下方法:

createButton( self, text, command, fg, bg, hgt, wth, cursor ):

我不知道如何控制按钮的命名为:

self.QUIT
self.Reset

“。”后面的属性或名称。 operator可以作为创建和命名按钮的属性传递给createButton。

1 个答案:

答案 0 :(得分:3)

简单地扩展Brian所说的内容,这段代码将帮助您实现目标。按钮对象存储在小部件字典中。以下是将其结合在一起的一种方法:

import tkinter as tk
import sys

root = tk.Tk()

class CustomButton(tk.Button):

    def __init__(self, parent, **kwargs):
        tk.Button.__init__(self, parent)
        for attribute,value in kwargs.items():
            try:
                self[attribute] = value
            except:
                raise

def doReset():
    print("doRest not yet implemented")

if __name__ == '__main__':
    widget = {}
    widget['quit'] = CustomButton(root, text='Quit', command=sys.exit)
    widget['reset'] = CustomButton(root, text='Reset', command=doReset)
    for button in widget.keys():
        widget[button].pack()
    root.mainloop()