【问题标题】:Saving output after choosing option menu (python - Tkinter)选择选项菜单后保存输出(python - Tkinter)
【发布时间】:2020-09-18 08:50:43
【问题描述】:

在用户点击确定按钮并在 Tkinter 中关闭窗口后,我正在尝试保存用户的选择 [Red, Green-red, Green-blue, blue] ......我把它放在一起所以远远使用我在网上找到的东西,但我无法推断出一种“简单”的方法?

def select_channel():
     OPTIONS = [
       "Red",
       "Green-red",
       "Green-blue",
       "Blue"
    ]

    master = tk.Tk()

    var = tk.StringVar(master)
    var.set(OPTIONS)  # initial value

    option = tk.OptionMenu(master, var, *OPTIONS)
    option.pack()


    def ok():
       print("value is", var.get())
       channel = var.get()
       master.destroy()

    button = tk.Button(master, text="OK", command=ok)
    button.pack()
    tk.mainloop()

有什么想法吗?我将它保存在频道下,但在该功能之外它不可用。嗯

【问题讨论】:

  • save 通常表示保存在文件中,但您只能使用assign to variable - 如果您想将其保存在文件中,请在函数ok() 中执行。或者使用global channel内部函数ok()分配给全局变量,它将在函数外部可用。
  • 您想保存应用程序的状态,以便在下一次会话中恢复它,或者您需要跟踪选择以供进一步使用?

标签: python python-3.x tkinter


【解决方案1】:

使用global为全局变量赋值

def ok():
    global channel

    print("value is", var.get())
    channel = var.get()
    master.destroy()

顺便说一句:使用return channel没有意义,因为函数是通过按钮执行的,它不能返回值并分配给其他值。


顺便说一句:如果你只想保存channel,那么可以在函数ok()中进行操作


顺便说一句:您应该在var.set(OPTIONS[0]) 中使用[0] 仅将第一个元素设置为默认/初始值。


import tkinter as tk

# --- functions ---

def select_channel():

     def ok():
         global channel

         #print("value is", var.get())
         channel = var.get()
         master.destroy()

     OPTIONS = [
       "Red",
       "Green-red",
       "Green-blue",
       "Blue"
     ]

     master = tk.Tk()

     var = tk.StringVar(master)
     var.set(OPTIONS[0])  # initial value

     option = tk.OptionMenu(master, var, *OPTIONS)
     option.pack()

     button = tk.Button(master, text="OK", command=ok)
     button.pack()

     tk.mainloop()

# --- main ---

select_channel()
print('after closing window:', channel)

【讨论】:

  • channel 未在发布的代码中的任何位置定义,除非在 ok() 内部分配它
  • @AlanHoover 没关系,它会在您评估价值时创建全局变量。但如果这是我的问题,那么在开始时使用一些默认值(创建全局变量的外部函数)创建它。 OP 希望在离开函数 ok() 后从 channel 获得价值,并可能在 OP 未显示的代码中使用它。
猜你喜欢
  • 1970-01-01
  • 2012-10-10
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多