0

我正在尝试为动态创建的按钮找到解决方案。例如,我的应用程序正在动态创建 5 个按钮,每个按钮在回调函数中具有不同的功能。我想要做的是,如果按下按钮 5,如果单击按钮 5,我将如何在功能上进行比较。我没有为每个按钮创建单独的功能。只有一个功能,其中我对每个按钮都有逻辑。

from tkinter import *

root = Tk()

masterFrame = Frame(root,bg = 'orange',height =300,width =600)
masterFrame.grid(row = 0,column = 0,sticky ='nsew')

ButtonString = ['DashBoard','Report','Tools','Settings','About']

# How should I compare what function to call when Button object is passed
def viewButton(btn):
    
    def DashBoard():
        pass
    
    def Report():
        pass
    
    def Tools():
        pass
    
#This is what I want to do    
    
    # if btn == 'DashBoard:
    #    DashBoard()
        
    # if btn == 'Report:
    #    Report()

for index,btn in enumerate(ButtonString):
    #Button text remains same for all Buttons which is "View"
    btn = Button(masterFrame,text = 'View',command = viewButton)
    btn.grid(row = index ,column = 0,padx =10,pady =10)

root.rowconfigure(0,weight = 1)
root.columnconfigure(0,weight =1)

root.mainloop()
4

1 回答 1

1
from tkinter import *
from functools import partial
root = Tk()

masterFrame = Frame(root, bg='orange', height=300, width=600)
masterFrame.grid(row=0, column=0, sticky='nsew')

ButtonString = ['DashBoard', 'Report', 'Tools', 'Settings', 'About']


# Calling this function from somewhere else via Queue
def viewButton(btn):
    print(btn)
    def DashBoard():
        pass

    def Report():
        pass

    def Tools():
        pass


# This is what I want to do

# if btn == 'DashBoard:
#    DashBoard()

# if btn == 'Report:
#    Report()

for index, btn_name in enumerate(ButtonString):
    btn = Button(masterFrame, text='View '+str(btn_name), command=partial(viewButton, btn_name))
    btn.grid(row=index, column=0, padx=10, pady=10)

root.rowconfigure(0, weight=1)
root.columnconfigure(0, weight=1)

root.mainloop()

您可以使用上面的代码来检查按下了哪个按钮。您可以根据需要更改参数。

于 2021-06-18T03:38:29.397 回答