Python 3单选按钮控制标签文本

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

我正在学习Python3,更多的是必需品,TkInter GUI方面。当我遇到这个问题时,我正在通过詹姆斯凯利的一本书。他的所有例子都只用标签/画布/复选框等创建了一个新窗口,看起来工作正常。

但是,当我想在一个更真实的世界场景中进行实验时,我将大多数事情放在一个窗口上。这是我遇到问题的地方。我无法在框架中获取单选按钮来更改父窗口中标签的措辞。

完整的代码是: -

#! /usr/bin/python3

from tkinter import *

def win_pos(WL,WH,xo=0,yo=0) :

# Screen size & position procedure
# Screen size
    SW = home.winfo_screenwidth()
    SH = home.winfo_screenheight()
# 1/2 screen size
    sw=SW/2
    sh=SH/2
# 1/2 window size
    wl=WL/2
    wh=WH/2
# Window position
    WPx=sw-wl+xo
    WPy=sh-wh+yo
# Resulting string
    screen_geometry=str(WL) + "x" + str(WH) + "+" + str(int(WPx)) + "+" \     + str(int(WPy))
    return screen_geometry

# Create a window 
home=Tk()
home.title("Radio buttons test")
# Set the main window
home.geometry(win_pos(600,150))

lab1=Label(home)

lab1.grid(row=1,column=1)

fraym1=LabelFrame(home, bd=5, bg="red",relief=SUNKEN, text="Label frame text")

fraym1.grid(row=2,column=2)

laybl1=Label(fraym1, text="This is laybl1")

laybl1.grid(row=0, column=3)

var1=IntVar()

R1=Radiobutton(fraym1, text="Apple", variable=var1, value=1)
R1.grid(row=1, column=1)

R2=Radiobutton(fraym1, text="Asus", variable=var1, value=2)
R2.grid(row=1, column=2)

R3=Radiobutton(fraym1, text="HP", variable=var1, value=3)
R3.grid(row=1, column=3)

R4=Radiobutton(fraym1, text="Lenovo", variable=var1, value=4)
R4.grid(row=1, column=4)

R5=Radiobutton(fraym1, text="Toshiba", variable=var1, value=5)
R5.grid(row=1, column=5)

# Create function used later
def sel(var) :

    selection="Manufacturer: "

    if var.get() > 0 : 

        selection=selection + str(var.get())

    lab1.config(text=selection)

R1.config(command=sel(var1))
R2.config(command=sel(var1))
R3.config(command=sel(var1))
R4.config(command=sel(var1))
R5.config(command=sel(var1))

R1.select()

mainloop()

我意识到使用类/函数还有改进的余地,但我需要在继续之前解决这个问题。正如可以预见的那样,我不是一个完整的编程新手,但这是我的头脑。

可以给出解决方案和解决方案背后的推理吗?

python-3.x tkinter radio-button label
1个回答
0
投票

您可以通过指定相同的变量类对象var1作为其textvariable选项来修改标签的文本,但由于lab1的文本略有不同,请尝试删除:

R1.config(command=sel(var1))
R2.config(command=sel(var1))
R3.config(command=sel(var1))
R4.config(command=sel(var1))
R5.config(command=sel(var1))

R1.select()

并将sel修改为:

def sel(*args) :

    selection="Manufacturer: "

    selection=selection + str(var1.get())

    lab1.config(text=selection)

然后在var1.trace("w", sel)之前的某个地方调用mainloop,如:

...
var1.trace("w", sel)
mainloop()

还有一个简单的例子:

import tkinter as tk

root = tk.Tk()

manufacturers = ["man1", "man2", "man3", "man4", "man5"]

lbl = tk.Label(root, text="Please select a manufacturer.")
lbl.pack()

# create an empty dictionary to fill with Radiobutton widgets
man_select = dict()
# create a variable class to be manipulated by radiobuttons
man_var = tk.StringVar(value="type_default_value_here_if_wanted")

# fill radiobutton dictionary with keys from manufacturers list with Radiobutton
# values assigned to corresponding manufacturer name
for man in manufacturers:
    man_select[man] = tk.Radiobutton(root, text=man, variable=man_var, value=man)
    #display
    man_select[man].pack()


def lbl_update(*args):
    selection="Manufacturer: "
    selection=selection + man_var.get()

    lbl['text'] = selection

#run lbl_update function every time man_var's value changes
man_var.trace('w', lbl_update)
root.mainloop()

标签与radiobutton值相同的示例:

import tkinter as tk

root = tk.Tk()

# radiobutton group will the button selected with the value=1
num = tk.IntVar(value=1)

lbl = tk.Label(root, textvariable=num)

zero = tk.Radiobutton(root, text="Zero", variable=num, value=0)
one = tk.Radiobutton(root, text="One", variable=num, value=1)

#display
lbl.pack()
zero.pack()
one.pack()

root.mainloop()
© www.soinside.com 2019 - 2024. All rights reserved.