【问题标题】:retrieve selected value from a binded combobox in tkinter从 tkinter 中的绑定组合框中检索选定的值
【发布时间】:2022-08-18 18:24:56
【问题描述】:

我正在尝试从绑定的组合框中检索选定的值。

在下面的代码中,我将名为“LSF_Combo”的组合框绑定到另一个组合框“Queue _Combo”。我正在尝试使用 Queue_Combo.get() 方法从“Queue_Combo”中检索选定的值,但我无法这样做,因为它的范围仅限于 LSF_fields_Enable(event) 内部函数。我可以使用 LSF_Combo.get() 方法检索 LSF_Combo 的选定值。

如果有人对从“Queue_Combo”组合框中检索所选值有任何建议,请告诉我。

\'\'\'

from tkinter import *
import tkinter as tk
from tkinter import ttk

root = Tk()
root.geometry(\"300x250\")

def Gui_main():
    Queue_Combo = ttk.Combobox(root)
    def LSF_Fields_Enable(event):
        # global Queue_Combo, VCO_Combo, OS_Combo
        nonlocal Queue_Combo
        VCO_1 = None
        if LSF_Combo.get() == \'LSF\':
            # # section for Queue Type
            Queue_Combo_label = tk.Label(root, text=\"Queue: \").grid(row=2, column=1, padx=10,sticky=W)
            Queue_Combo_list = [\'normal\', \'priority\', \'devices\', \'grid\']
            Queue_Combo = ttk.Combobox(root, values=Queue_Combo_list, width=10, state=\"readonly\")
            Queue_Combo.set(\"normal\")
            Queue_Combo.grid(row=2, column=1, padx=55, pady=5, sticky=W)
        # print(Queue_Combo.get())
        return Queue_Combo.get()

    # LSF_Fields_Enable()

    LSF_Combo_label = tk.Label(root, text=\"Fill: \").grid(row=2, column=0, sticky=W)
    LSF_Combo_list = [\'LSF\', \'LOCAL\']
    LSF_Combo = ttk.Combobox(root, values=LSF_Combo_list, width=10, state=\"readonly\", background=\'white\')
    LSF_Combo.set(\'LSF\')
    LSF_Combo.grid(row=2, column=0, padx=25, pady=5, sticky=W)
    LSF_Combo.bind(\'<<ComboboxSelected>>\', LSF_Fields_Enable)
    # a = LSF_Combo.bind(\"<Return\", LSF_Fields_Enable)

    def test_bind():
        print(LSF_Combo.get())
        print(Queue_Combo.get())
    test_bind()

    close = Button(root, text =\'close\', command= root.destroy).grid(row=10, pady=60, sticky=E)
    root.mainloop()

if __name__ == \"__main__\":
    Gui_main()

\'\'\'

    标签: python tkinter combobox


    【解决方案1】:

    在您的设置中没有一种简单的方法可以解决此问题。 但是解决方案很简单,只要您继续稍微重构一下代码:

    1. 定义外面的组合框LSF_Fields_Enable函数并在启动时分配其值。 Queue_Combo_list = ['normal', 'priority', 'devices', 'grid'] Queue_Combo = ttk.Combobox(root, values=Queue_Combo_list, width=10, state="readonly")

    2. 现在绑定组合框选中事件到你想要的任何功能(在这个例子中是一个简单的打印)。 Queue_Combo.bind('&lt;&lt;ComboboxSelected&gt;&gt;', lambda _: print(Queue_Combo.get()))

      你去吧! 现在,每次队列组合框的选择更改时都会执行打印功能。

      希望这可以帮助 :)

      完整代码:

      from tkinter import *
      import tkinter as tk
      from tkinter import ttk
      
      root = Tk()
      root.geometry("300x250")
      
      def Gui_main():
          Queue_Combo_list = ['normal', 'priority', 'devices', 'grid']
          Queue_Combo = ttk.Combobox(root, values=Queue_Combo_list, width=10, state="readonly")
          def LSF_Fields_Enable(event):
              # global Queue_Combo, VCO_Combo, OS_Combo
              VCO_1 = None
              if LSF_Combo.get() == 'LSF':
                  # # section for Queue Type
                  Queue_Combo_label = tk.Label(root, text="Queue: ").grid(row=2, column=1, padx=10,sticky=W)
                  Queue_Combo.set("normal")
                  Queue_Combo.grid(row=2, column=1, padx=55, pady=5, sticky=W)
              print(Queue_Combo.get())
              return Queue_Combo.get()
      
          # LSF_Fields_Enable()
      
          LSF_Combo_label = tk.Label(root, text="Fill: ").grid(row=2, column=0, sticky=W)
          LSF_Combo_list = ['LSF', 'LOCAL']
          LSF_Combo = ttk.Combobox(root, values=LSF_Combo_list, width=10, state="readonly", background='white')
          LSF_Combo.set('LSF')
          LSF_Combo.grid(row=2, column=0, padx=25, pady=5, sticky=W)
          LSF_Combo.bind('<<ComboboxSelected>>', LSF_Fields_Enable)
          Queue_Combo.bind('<<ComboboxSelected>>', lambda _: print(Queue_Combo.get()))
          # a = LSF_Combo.bind("<Return", LSF_Fields_Enable)
      
          def test_bind():
              print(LSF_Combo.get())
              print(Queue_Combo.get())
          test_bind()
      
          close = Button(root, text ='close', command= root.destroy).grid(row=10, pady=60, sticky=E)
          root.mainloop()
      
      if __name__ == "__main__":
          Gui_main()
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多