python单选按钮重置_Tkinter单选按钮初始化错误

存储变量对象的位置(在您的例子中是StringVar,v)必须保持不变,这样就不会出现这种奇怪的行为。我猜我们看到这种行为是因为v,超出了范围,出了问题。除了使用全局函数外,我想不出从函数中执行此操作的方法。

断码:from Tkinter import *

def App(master):

v = StringVar()

v.set('python')

lable1 = Label(master, text=' hovering over below radio buttons will cause them to look like they are selected')

lable1.pack()

runtimeFrame = Frame(master, relief=GROOVE, borderwidth=3)

runtimeFrame.pack(fill=X, pady=5, padx=5)

for mode in ['java', 'python', 'jython']:

b = Radiobutton(runtimeFrame, text=mode, variable=v, value=mode, indicatoron=1)

b.pack(side=LEFT)

if __name__ == '__main__':

master = Tk()

App(master)

mainloop()

示例修复:from Tkinter import *

def App(master, radio_var):

radio_var.set('python')

lable1 = Label(master, text=' hovering over below radio buttons will cause them to look like they are selected')

lable1.pack()

runtimeFrame = Frame(master, relief=GROOVE, borderwidth=3)

runtimeFrame.pack(fill=X, pady=5, padx=5)

for mode in ['java', 'python', 'jython']:

b = Radiobutton(runtimeFrame, text=mode, variable=radio_var, value=mode, indicatoron=1)

b.pack(side=LEFT)

if __name__ == '__main__':

master = Tk()

radio_var = StringVar()

App(master, radio_var)

mainloop()

考虑一下,如果有多个变量需要持久化,那么可以传入一个变量列表或字典。

另外,为了防止“必须在函数中”是家庭作业要求,请考虑将代码包装到类中。我不是tk专家,但这似乎是组织代码的首选方式。

示例修复2:from Tkinter import *

class App(object):

def __init__(self, master):

self.radio_var = StringVar()

self.radio_var.set('python')

lable1 = Label(master, text=' hovering over below radio buttons will cause them to look like they are selected')

lable1.pack()

runtimeFrame = Frame(master, relief=GROOVE, borderwidth=3)

runtimeFrame.pack(fill=X, pady=5, padx=5)

for mode in ['java', 'python', 'jython']:

b = Radiobutton(runtimeFrame, text=mode, variable=self.radio_var, value=mode, indicatoron=1)

b.pack(side=LEFT)

if __name__ == '__main__':

master = Tk()

app = App(master)

mainloop()

注意到app = App(master)

这是必需的,这样应用程序实例就不会过早地被垃圾回收。这将有效地把self.radio_var拉出范围,我们回到原点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值