猿问

Tkinter单选按钮在运行时分配最后一个变量?

我有三个文件,我正在尝试通过单选按钮更改变量的值:


配置文件


epoch=1

图像分类器.py


import config

train(args, model, device, train_loader, optimizer, config.epoch)

图形用户界面


import config

def changeEpoch(epochValue):

   config.epoch=epochValue


var1 = IntVar()

epochRadioButton1 = Radiobutton(middleFrame, variable=var1, value=1, 

text="1", command=changeEpoch(1))

epochRadioButton5 = Radiobutton(middleFrame, variable=var1, value=2, 

text="5", command=changeEpoch(5))

epochRadioButton10 = Radiobutton(middleFrame, variable=var1, value=3, 

text="10", command=changeEpoch(10))

epochRadioButton20 = Radiobutton(middleFrame, variable=var1, value=4, 

text="20", command=changeEpoch(20))

var1.set(1)

然而,无论如何,当我运行我的程序时,epoch 的值总是 20,我似乎无法弄清楚为什么。


交互式爱情
浏览 205回答 1
1回答

函数式编程

考虑这行代码:epochRadioButton20 = Radiobutton(..., command=changeEpoch(20))它具有与此完全相同的效果:result = changeEpoch(20)epochRadioButton20 = Radiobutton(..., command=result)该command属性采用可调用的。但是,您的代码会立即调用该函数并将结果提供给该command属性。我建议不要将新值传递给函数,而是让函数从单选按钮中获取值。为此,请进行以下更改:def changeEpoch():    epochValue = var1.get()    config.epoch=epochValue...epochRadioButton20 = Radiobutton(..., command=lambda: changeEpoch)另一种解决方案是创建一个匿名函数,lambda用于调用changeEpoch(假设您changeEpoch未修改):epochRadioButton20 = Radiobutton(..., command=lambda: changeEpoch(20))
随时随地看视频慕课网APP

相关分类

Python
我要回答