繁体   English   中英

根据在 TKinter 中单击的单选按钮,在选择中显示 label?

[英]Show the label among the selections, depending on the radio-button clicked in TKinter?

我有一个问题,只有一个 label 在单击单选按钮的实例中显示。 我想显示label取决于我单击的radio-button ,我尝试阅读有关 pack/grid_forget 的信息,但我认为我仍然不太了解它,或者我只是在我的代码中做错了。

from tkinter import *

root = Tk()
# I squeezed them inside a frame, just for aesthetic reasons.
btn_frame = LabelFrame(root, text='', padx=20, pady=20)
btn_frame.grid(row=0, column=0, columnspan=3, padx=10, pady=10)

# I use button widgets, instead of other widgets.Because I felt buttons are square, and they are easy 
to visualize.
red_btn = Button(btn_frame, text='R', padx=40, pady=40)
blue_btn = Button(btn_frame, text='B', padx=40, pady=40)
green_btn = Button(btn_frame, text='G', padx=40, pady=40)

red_btn.grid(row=0, column=0)
blue_btn.grid(row=0, column=1)
green_btn.grid(row=0, column=2)

def rad_btnClick(value):
    red_Btn_press_label = Label(root, text='You press R!', padx=40, bg='red')
    blu_Btn_press_label = Label(root, text='You press B!', padx=40, bg='blue')
    grn_Btn_press_label = Label(root, text='You press G!', padx=40, bg='green')

    if value == 1:
        red_Btn_press_label.grid(row=2, column=0,)
        red_btn = Button(btn_frame, text='r', padx=40, pady=40, bg='red')
        red_btn.grid(row=0, column=0)
        blu_Btn_press_label.grid_forget()
        grn_Btn_press_label.grid_forget()

    elif value == 2:
        blu_Btn_press_label.grid(row=2, column=1)
        blue_btn = Button(btn_frame, text='b', padx=40, pady=40, bg='blue')
        blue_btn.grid(row=0, column=1)
        red_Btn_press_label.grid_forget()
        grn_Btn_press_label.grid_forget()

    elif value == 3:
        grn_Btn_press_label.grid(row=2, column=2)
        green_btn = Button(btn_frame, text='g', padx=40, pady=40, bg='green')
        green_btn.grid(row=0, column=2)
        red_Btn_press_label.grid_forget()
        blu_Btn_press_label.grid_forget()


radiopress = IntVar()
# LABEL, VALUE, COLUMN
RAD_BUTTONS = [('RED BTN', 1, 0),
               ('BLU BTN', 2, 1),
               ('GRN BTN', 3, 2)]

for color, value, column in RAD_BUTTONS:
    rad_btn = Radiobutton(root, text=color, variable=radiopress,  value=value, command= lambda:rad_btnClick(radiopress.get()))
    rad_btn.grid(row=1, column=column)


root.mainloop()

所以我是 Python 的新手,我最近才了解每种 prog 语言的 4/5 核心基础知识。 现在我正在尝试使用 python 和 Tkinter 来了解 GUI。 我认为我的代码有点长,因为它是如此简单和小。 你可以随便给我讲课,我只想学习好的做法,改掉我可能正在做的坏习惯。

我发现我应该使我的小部件全局化,并且只需更新 function 以在每次创建它们的实例时显示。

我要感谢蒂姆·罗伯茨对我的帮助。

from tkinter import *

root = Tk()

btn_frame = LabelFrame(root, text='', padx=20, pady=20)
btn_frame.grid(row=0, column=0, columnspan=3, padx=10, pady=10)

red_btn = Button(btn_frame, text='R', padx=40, pady=40)
blue_btn = Button(btn_frame, text='B', padx=40, pady=40)
green_btn = Button(btn_frame, text='G', padx=40, pady=40)

red_btn.grid(row=0, column=0)
blue_btn.grid(row=0, column=1)
green_btn.grid(row=0, column=2)

def rad_btnClick(value):
    global rad_btn_press_label
    global red_btn
    global blue_btn
    global green_btn

    if value == 1:
        rad_btn_press_label.grid_forget()
        rad_btn_press_label = Label(root, text='You press R!', padx=40, bg='red')
        red_btn = Button(btn_frame, text='R', padx=40, pady=40, bg='red')
        blue_btn = Button(btn_frame, text='B', padx=40, pady=40)
        green_btn = Button(btn_frame, text='G', padx=40, pady=40)

        rad_btn_press_label.grid(row=2, column=0)
        red_btn.grid(row=0, column=0)
        blue_btn.grid(row=0, column=1)
        green_btn.grid(row=0, column=2)

    elif value == 2:
        rad_btn_press_label.grid_forget()
        rad_btn_press_label = Label(root, text='You press R!', padx=40, bg='blue')
        red_btn = Button(btn_frame, text='R', padx=40, pady=40)
        blue_btn = Button(btn_frame, text='B', padx=40, pady=40, bg='blue')
        green_btn = Button(btn_frame, text='G', padx=40, pady=40)

        rad_btn_press_label.grid(row=2, column=1)
        red_btn.grid(row=0, column=0)
        blue_btn.grid(row=0, column=1)
        green_btn.grid(row=0, column=2)

    elif value == 3:
        rad_btn_press_label.grid_forget()
        rad_btn_press_label = Label(root, text='You press G!', padx=40, bg='green')
        red_btn = Button(btn_frame, text='R', padx=40, pady=40)
        blue_btn = Button(btn_frame, text='B', padx=40, pady=40)
        green_btn = Button(btn_frame, text='G', padx=40, pady=40, bg='green')

        rad_btn_press_label.grid(row=2, column=2)
        red_btn.grid(row=0, column=0)
        blue_btn.grid(row=0, column=1)
        green_btn.grid(row=0, column=2)

radiopress = IntVar()
# LABEL, VALUE, ROW, COLUMN
RAD_BUTTONS = [('RED BTN', 1, 1, 0),
               ('BLU BTN', 2, 1, 1),
               ('GRN BTN', 3, 1, 2)]

for color, value, row, column in RAD_BUTTONS:
    rad_btn = Radiobutton(root, text=color, variable=radiopress,  value=value, command=lambda: rad_btnClick(radiopress.get()))
    rad_btn.grid(row=row, column=column)

rad_btn_press_label = Label(root, text='You press R!', padx=40,)
rad_btn_press_label.grid(row=2, column=0, )
rad_btn_press_label.grid_forget()

root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM