【问题标题】:Getting the row of a tkinter button in grid on click单击时在网格中获取 tkinter 按钮的行
【发布时间】:2015-09-16 14:54:30
【问题描述】:

我正在写一个简单的tkinter widget,其中有一列输入框和一列按钮。该按钮应在相应的输入框中打印值。我基本上已经编写了所有代码,但我已将行标签硬编码到我的函数中:

print find_in_grid(root, 2, 0).get()

我需要将2 替换为单击的按钮所在的行。我怎样才能得到那行?

完整代码:

from Tkinter import *

def print_value():
    print find_in_grid(root, 2, 0).get()


def find_in_grid(frame, row, column):
    for children in frame.children.values():
        info = children.grid_info()
        #note that rows and column numbers are stored as string
        if info['row'] == str(row) and info['column'] == str(column):
            return children
    return None

root = Tk()

height = 5
width = 1
for i in range(height): #Rows
    for j in range(width): #Columns
        b = Entry(root, text="", width=100)
        b.grid(row=i, column=j)

height = 5
width = 1
for i in range(height): #Rows
    for j in range(width): #Columns
        b = Button(root, text="print value", command=print_value, width=10)
        b.grid(row=i, column=j+1)


mainloop()

【问题讨论】:

    标签: python python-2.7 tkinter


    【解决方案1】:

    您可以将行和列值作为参数传递给print_value。绑定命令时不要忘记使用default variable trick,否则它会一直认为你点击了右下角的按钮。

    def print_value(row, col):
        print find_in_grid(root, row, col).get()
    
    #...
    
    height = 5
    width = 1
    for i in range(height): #Rows
        for j in range(width): #Columns
            b = Button(root, text="print value", command=lambda i=i,j=j: print_value(i,j), width=10)
            b.grid(row=i, column=j+1)
    

    你也可以直接传入入口对象,但这需要一些重构:

    from Tkinter import *
    
    def print_value(entry):
        print entry.get()
    
    root = Tk()
    
    height = 5
    width = 1
    for i in range(height): #Rows
        for j in range(width): #Columns
            entry = Entry(root, text="", width=100)
            entry.grid(row=i, column=j)
            b = Button(root, text="print value", command= lambda entry=entry: print_value(entry), width=10)
            b.grid(row=i, column=j+1)
    
    mainloop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多