Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 如何在tkinter python中获取放置在网格中的小部件的行号和列号?_Python 2.7_Tkinter_Combobox - Fatal编程技术网

Python 2.7 如何在tkinter python中获取放置在网格中的小部件的行号和列号?

Python 2.7 如何在tkinter python中获取放置在网格中的小部件的行号和列号?,python-2.7,tkinter,combobox,Python 2.7,Tkinter,Combobox,我在网格中放置了多个组合框,如下所示 self.c_arr[row,column] = ttk.Combobox(what_ev, textvariable=self.c_it_val[row,column], values=list(self.c_list[row,column].keys())) self.c_arr[row,column].bind("<<ComboboxSelected>>", lambda x:self.c_capt

我在网格中放置了多个组合框,如下所示

self.c_arr[row,column] = ttk.Combobox(what_ev, 
    textvariable=self.c_it_val[row,column], 
    values=list(self.c_list[row,column].keys()))
self.c_arr[row,column].bind("<<ComboboxSelected>>", lambda 
    x:self.c_capture(what_ev, <Want to pass row, column information as well>))

这些组合框存储在数组中,对应于eg的行、列,如下所示

self.c_arr[row,column] = ttk.Combobox(what_ev, 
    textvariable=self.c_it_val[row,column], 
    values=list(self.c_list[row,column].keys()))
self.c_arr[row,column].bind("<<ComboboxSelected>>", lambda 
    x:self.c_capture(what_ev, <Want to pass row, column information as well>))
self.c_arr[row,column]=ttk.Combobox(what_ev,
textvariable=self.c_it_val[行,列],
values=list(self.c_list[row,column].keys())
self.c_arr[行,列].bind(“,lambda
x:self.c_捕获(what_ev,))
无论何时调用/触发绑定到combobox的函数,我都希望将相应的行、列编号与其他变量一起传递给被调用的函数

如何获取/检索放置在网格上的相应窗口小部件行、列号/位置详细信息

更新:使用下面的示例代码添加

  • 下面的代码创建了一个3x3组合框,并绑定了一个函数,以便在选择相应组合框时调用。当被选中时,我想在该框中选择值并打印它 示例代码:

    import Tkinter
    from Tkinter import *
    from Tkinter import Tk, StringVar
    import ttk
    import tkFont
    
    class Application:
    
        def __init__(self, parent):
            self.parent = parent
            self.sco1 = None
            self.c_int_val = StringVar()
            self.box = {}
            self.box_value = {}
            self.box_int_list = {}
            self.combo()
    
        def combo(self):
            for row in range (3):
                for column in range(3):
                    self.box_int_list[row,column] = {key: None for key in range(1,10)}
    
                    self.box_value[row,column] = StringVar()
                    self.box_value[row,column].set("0")
    
                    self.box[row,column] = ttk.Combobox(self.parent, textvariable=self.box_value[row,column], values = list(self.box_int_list[row,column].keys()), state='readonly', width=39)
                    self.box[row,column].bind("<<ComboboxSelected>>", lambda x:self.print_selected_value("Eurekaa", len(self.box_int_list[row,column])))
    
                    self.box[row,column].grid(row=row, column=column)
    
        def print_selected_value(self, what_name, list_len, *args):
            print "Value selected is: %s"%(self.box[row,column].get())
            print what_name 
            print list_len
    
    
    if __name__ == '__main__':
        root = Tk()
        app = Application(root)
        root.mainloop()
    
    导入Tkinter
    从Tkinter进口*
    从Tkinter导入Tk,StringVar
    导入ttk
    导入tkFont
    班级申请:
    定义初始化(自身,父级):
    self.parent=parent
    self.sco1=无
    self.c_int_val=StringVar()
    self.box={}
    self.box_值={}
    self.box_int_list={}
    self.combo()
    def组合(自我):
    对于范围(3)中的行:
    对于范围(3)中的列:
    self.box_int_list[row,column]={key:None表示范围(1,10)中的键}
    self.box_值[行,列]=StringVar()
    self.box\u值[行,列].set(“0”)
    self.box[row,column]=ttk.Combobox(self.parent,textvariable=self.box\u value[row,column],values=list(self.box\u int\u list[row,column].keys()),state='readonly',width=39)
    self.box[row,column].bind(“,lambda x:self.print\u selected\u value(“Eurekaa”,len(self.box\u int\u list[row,column]))
    self.box[行,列].grid(行=行,列=列)
    def print_selected_值(self、what_name、list_len、*args):
    打印“所选值为:%s”%(self.box[行,列].get())
    打印你的名字
    打印列表
    如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
    root=Tk()
    app=应用程序(根)
    root.mainloop()
    

    但由于我无法获取行、列信息,因此无法从所选组合框中获取值。如何做到这一点?

    如果将事件传递给回调,则可以在与事件关联的小部件上使用
    grid\u info

    def callback(event, row, column):
        print(row, column)
    
    cb.bind("<<ComboboxSelected>>", callback)
    

    @TkinterPythonFans:关于如何获得这些信息有什么想法或意见吗?小部件是否提供了一些可以检索行、列信息的内部函数。如果没有其他解决方法,如何将这些信息传递给触发绑定函数?非常感谢您的评论/澄清,这真的很有帮助!