为什么我的单选按钮在悬停时会改变外观?

问题描述 投票:0回答:1

我正在使用 Python 3.11.10 和 Spyder 6.0.2。

我不知道这是一个编码问题,还是与我正在使用的 Spyder 6.0.2 平台有关,或者是这个版本的 Python 中的一个小故障,或者可能是什么。当我运行应用程序时,当我将鼠标悬停在单选按钮上时,单选按钮会更改外观,即使我没有编写任何类型的悬停代码。如果我选择其中一个选项,整个组将返回到所需的外观,并且悬停时不再更改同一组中未选定的单选按钮。仅当未选择任何选项时才会发生这种情况(在按钮的初始化状态下,未选择任何选项)。这是某种故障,我在互联网上找不到任何内容来解释为什么会发生这种情况。

一些单选按钮的代码在这里:

drivewheelbut = tkinter.IntVar(value=0)
drivewheel1 = tkinter.Radiobutton(master=cstfrm, variable=drivewheelbut, value=1, bg="#b2b4b7", takefocus=False)
drivewheel1.place(height=20, x=502, y=450)
drivewheel1.configure(bg="#292d2e")
drivewheel2 = tkinter.Radiobutton(master=cstfrm, variable=drivewheelbut, value=2, bg="#b2b4b7", takefocus=False)
drivewheel2.place(height=20, x=502, y=470)
drivewheel2.configure(bg="#292d2e")
drivewheel3 = tkinter.Radiobutton(master=cstfrm, variable=drivewheelbut, value=3, bg="#b2b4b7", takefocus=False)
drivewheel3.place(height=20, x=502, y=490)
drivewheel3.configure(bg="#292d2e")
drivewheel4 = tkinter.Radiobutton(master=cstfrm, variable=drivewheelbut, value=4, bg="#b2b4b7", takefocus=False)
drivewheel4.place(height=20, x=502, y=510)
drivewheel4.configure(bg="#292d2e")
drivewheellbl1 = tkinter.Label(master=cstfrm, text="FWD", bg="#292d2e", fg="#b2b4b7")
drivewheellbl1.place(x=522, y=450)
drivewheellbl2 = tkinter.Label(master=cstfrm, text="RWD", bg="#292d2e", fg="#b2b4b7")
drivewheellbl2.place(x=522, y=470)
drivewheellbl3 = tkinter.Label(master=cstfrm, text="AWD", bg="#292d2e", fg="#b2b4b7")
drivewheellbl3.place(x=522, y=490)
drivewheellbl4 = tkinter.Label(master=cstfrm, text="4WD", bg="#292d2e", fg="#b2b4b7")
drivewheellbl4.place(x=522, y=510)

其他的设计都一样。

Radio Buttons Before Hovering

Radio Buttons After Hovering

我确实注意到这种现象只发生在四个单选按钮组中。两个按钮组(自动或手动)不会执行此操作(即使它们的写法完全相同)。这只是两个较大的四个单选按钮组。

有什么想法可能导致这种情况吗?

python tkinter visual-glitch
1个回答
0
投票

如问题的评论链接所示,解决方案之一提到将变量设为全局变量。但是,它不需要像链接帖子所建议的那样位于函数中。只需要一行代码即可使变量成为全局变量。在建立

global drivewheelbut
之前添加
drivewheelbut = tkinter.IntVar(value=0)
就达到了目的。

global drivewheelbut
drivewheelbut = tkinter.IntVar(value=0)
drivewheel1 = tkinter.Radiobutton(master=cstfrm, variable=drivewheelbut, value=1, bg="#292d2e", takefocus=False)
drivewheel1.place(height=20, x=502, y=450)
© www.soinside.com 2019 - 2024. All rights reserved.