[英]unable to use variable of one function to another function in tkinter python
我正在尝试创建GUI,无法在tkinter的另一个函数上的一个函数中使用变量的值
但是,在普通函数中,当我们将变量声明为全局变量时,它是可访问的。
这是我的代码,
from tkinter import *
global chosen_option
root = Tk()
root.title("Drop-down boxes for option selections.")
var = StringVar(root)
var.set("drop down menu button")
def grab_and_assign(event):
grab_and_assign.var = var.get()
label_chosen_variable= Label(root, text=chosen_option)
label_chosen_variable.grid(row=1, column=2)
print(chosen_option)
def pri():
print(grab_and_assign.chosen_option)
drop_menu = OptionMenu(root, var, "one", "two", "three", "four", "meerkat", "12345", "6789", command=grab_and_assign)
drop_menu.grid(row=0, column=0)
label_left=Label(root, text="chosen variable= ")
label_left.grid(row=1, column=0)
pri()
root.mainloop()
您有两个问题:
首先: mainloop()
启动window,以便在看到window之前先执行pri()
-在选择任何内容之前。 我在按钮上添加了pri
,因此选择选项后您还可以查看其工作方式。
其次:所有创建外部函数/类的变量都是全局变量,它们不需要关键字global
。 您必须使用global
内部函数来通知函数,何时使用=
分配值,那么您将使用外部/全局变量而不是创建局部变量。
在代码中,我具有全局变量normal_var
并且在grab_and_assign
使用global normal_var
来通知函数将值分配给全局变量,而不是在行中创建局部变量
normal_var = var.get()
我不必在pri()
使用global
因为我仅从变量nromal_var
获取值,而不必使用=
来分配新值
我不必使用global
为以下项分配新值:
var
因为它使用set()
而不是=
。 label_selected["text"]
因为它为字典中的键分配值。 但是,如果我想在函数内部分配新的Label
,即必须为label_selected
使用global
。 label_selected = tk.Label(..)
import tkinter as tk
# --- functions ---
def grab_and_assign(event):
global normal_var
normal_var = var.get()
label_selected["text"] = var.get()
def pri():
print('normal_var:', normal_var)
print('var.get():', var.get())
print('---')
# --- main ---
# global variable
normal_var = "- empty -"
root = tk.Tk()
root.title("Drop-down boxes for option selections.")
# it is global variable
var = tk.StringVar(root)
var.set("drop down menu button")
drop_menu = tk.OptionMenu(root, var, "one", "two", "three", "four", "meerkat", "12345", "6789", command=grab_and_assign)
drop_menu.grid(row=0, column=0)
label_left = tk.Label(root, text="chosen variable = ")
label_left.grid(row=1, column=0)
# create it only once
label_selected = tk.Label(root, text="?")
label_selected.grid(row=1, column=1)
# execute `pri` after button press
b = tk.Button(root, text='PRI', command=pri)
b.grid(row=2, column=0)
# execute `pri` before window starts
pri()
root.mainloop()
顺便说一句: Label
具有textvariable=
和可以分配var
您在使用OptionMenu
,然后它会自动显示选择的值
import tkinter as tk
# --- main ---
root = tk.Tk()
var = tk.StringVar(root)
var.set("drop down menu button")
label_selected = tk.Label(root, textvariable=var)
label_selected.pack()
drop_menu = tk.OptionMenu(root, var, "one", "two", "three", "four", "meerkat", "12345", "6789")
drop_menu.pack()
root.mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.