gpt4 book ai didi

python - 使用 tkinter 分配全局变量并销毁 gui

转载 作者:太空宇宙 更新时间:2023-11-04 03:32:23 26 4
gpt4 key购买 nike

我一直在编写年度数据验证程序,需要一些用户输入,因此决定采用 tkinter 路线。我已经为其中一个用户输入屏幕创建了界面,并且必须创建其他界面,但是我在进行选择后窗口的破坏以及变量的全局化方面遇到了一些问题。

所以理想情况下,程序运行,弹出窗口,进行适当的属性选择,按钮上的文本被传递给“assign”函数,它创建一个要在我的程序中使用的全局变量,并且窗口消失。

就目前而言,运行此代码会导致错误:“TclError:无法调用“按钮”命令:应用程序已被销毁”。

如果我注释掉“mGui.destroy()”行,我可以选择一个按钮并手动关闭窗口,但无论如何“DRN”变量都会传递给变量“x”!

import sys
from Tkinter import *

def assign(value):
global x
x = value
mGui.destroy()

mGui = Tk()
mGui.geometry("500x100+500+300")
mGui.title("Attribute Selection Window")

mLabel = Label(mGui, text = "Please select one of the following attributes to assign to the selected Convwks feature:").pack()

mButton = Button(mGui, text = "CON", command = assign("CON")).pack()
mButton = Button(mGui, text = "MS", command = assign("MS")).pack()
mButton = Button(mGui, text = "DRN", command = assign("DRN")).pack()

mGui.mainloop() #FOR WINDOWS ONLY

奖励问题:将所有按钮放在同一行上,中间留有空格,同时保持它们居中。

最佳答案

您的代码存在的问题是您无法在添加按钮命令时调用函数。你不能写Button(command=function()),你必须写Button(command=function)。如果你想将一个参数传递给一个函数,你必须这样做:

而不是:

mButton = Button(mGui, text = "CON", command = assign("CON")).pack()
mButton = Button(mGui, text = "MS", command = assign("MS")).pack()
mButton = Button(mGui, text = "DRN", command = assign("DRN")).pack()

你必须写:

mButton = Button(mGui, text = "CON", command = lambda: assign("CON")).pack()
mButton = Button(mGui, text = "MS", command = lambda: assign("MS")).pack()
mButton = Button(mGui, text = "DRN", command = lambda: assign("DRN")).pack()

如果你想把所有的按钮放在同一行,你可以使用这个代码:

import sys
from Tkinter import *

def assign(value):
global x
x = value
mGui.destroy()

mGui = Tk()
mGui.geometry("500x100+500+300")
mGui.title("Attribute Selection Window")

frame1 = Frame(mGui)
frame1.pack()

mLabel = Label(frame1, text = "Please select one of the following attributes to assign to the selected Convwks feature:").grid(row=0, column=0)

frame2 = Frame(mGui)
frame2.pack()


mButton = Button(frame2, text = "CON", command = lambda: assign("CON")).grid(row=0, column=0, padx=10)
mButton = Button(frame2, text = "MS", command = lambda: assign("MS")).grid(row=0, column=1, padx=10)
mButton = Button(frame2, text = "DRN", command = lambda: assign("DRN")).grid(row=0, column=2, padx=10)
mGui.mainloop() #FOR WINDOWS ONLY

关于python - 使用 tkinter 分配全局变量并销毁 gui,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30607261/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com