【问题标题】:Creating entry and buttons linked in tkinter创建在 tkinter 中链接的条目和按钮
【发布时间】:2016-05-03 12:59:37
【问题描述】:

我正在创建一个 GUI,我需要在 Tkinter 中创建一定数量的条目和按钮。我想在 for 循环中创建所有这些。作为动作,当我按下任何一个按钮时,它应该将 Entry 的值传输到它旁边的按钮的回调中。

这是我到目前为止所做的,但还没有工作。

 n=0
 self.button = []
 self.entFreq = []

 for calVal in calibration:                                                                             
    lbl = Label(self.calFrame)
    lbl.configure(text = "Set amplitud to " + calVal)
    lbl.configure(background=self.bg_App, fg = "white")
    lbl.grid(row=n, column=0)

    self.entFreq.append(Entry(self.calFrame, width=10))
    self.entFreq[n].grid(row=n, column=1, padx = 10)

    #Construction Button send frequency
    self.button.append(Button(self.calFrame, text="Cal", borderwidth=0, relief="groove", command = lambda n=self.entFreq[n].get(): self.get_val(n)))
    self.button[n].configure(bg="#FFF3E0")
    self.button[n].grid(row=n, column=2)
    n+=1

def get_val(self, var):
    print "Got this:", str(var)

我只是在 var 函数中变得空白。这两者如何联系起来?

【问题讨论】:

    标签: python loops button tkinter tkinter-entry


    【解决方案1】:

    您在 lambda 中添加了太多代码。你只需要传入n,剩下的工作就交给get_val了:

    self.button.append(Button(..., command=lambda n=n: self.get_val(n)))
    ...
    def get_val(self, n):
        value = self.entFreq[n].get()
        print "Got this:", value
    

    您可能需要考虑为这组标签、条目和按钮定义一个类,因为它们旨在协同工作,并且您正在制作几组。

    例如,您可以传入一个标签和一个函数,以便在用户单击按钮时调用。例如:

    class LabelEntry(object):
        def __init__(self, parent, text, command):
            self.command = command
            self.label = Label(parent, text=text)
            self.entry = Entry(parent)
            self.button = Button(parent, text="Cal", command=self.call_command)
    
        def call_command(self):
            value = self.entry.get()
            self.command(value)
    

    你会像这样使用它:

    def some_function(self, value):
        print "the value is", value
    ...
    for calVal in calibration:
        le = LabelEntry(frame, 
                        text="Set aplitud to " + calVal, 
                        command=self.some_function)
        le.label.grid(...)
        le.entry.grid(...)
        le.button.grid(...)
    

    【讨论】:

    • 非常感谢您的回答,很清楚。它就像一个魅力。我希望我能以同样的方式编程!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多