tkinter 不太理解
本帖最后由 Daniel_Zhang 于 2021-1-23 00:50 编辑请各位老板,大佬帮忙解答一下,谢谢~
问题如下:我不是很理解,那个 value 'A' 'B' 'C' 是如何传递给 var 的。var 在 print_selection 那里直接 var.get() 就获取到了选中的值。这是怎么做到的?
另外, variable 是什么,就是 variable = var 那里的?value 又是什么?
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('200x200')
var = tk.StringVar()
l = tk.Label(window, bg = 'yellow', width = 15, text = 'empty')
l.pack()
def print_selection():
l.config(text = 'you have selected ' + var.get())
var.set(0)
radio_button1 = tk.Radiobutton(window, text = 'Option A', variable = var, value = 'A', command = print_selection)
radio_button1.pack()
radio_button2 = tk.Radiobutton(window, text = 'Option B', variable = var, value = 'B', command = print_selection)
radio_button2.pack()
radio_button3 = tk.Radiobutton(window, text = 'Option C', variable = var, value = 'C', command = print_selection)
radio_button3.pack()
window.mainloop()
p.s 结贴迅速,如果是最佳,绝不拖拉~ 建议用 Pysimplegui °蓝鲤歌蓝 发表于 2021-1-23 00:51
建议用 Pysimplegui
emmmmmmm,接受建议,但是还是挺想学 tkinter的,就先学这个啦{:10_248:} Daniel_Zhang 发表于 2021-1-23 00:53
emmmmmmm,接受建议,但是还是挺想学 tkinter的,就先学这个啦
看了一下源码,
radio_button1.pack()
这一步最后调用的应该是 C 语言拓展了。 本帖最后由 °蓝鲤歌蓝 于 2021-1-23 01:22 编辑
我猜测是 pack的时候将 value = 'A' 的值传到队列里,然后调用回调函数,然后 var 通过 get 从队列里取值。 {:10_256:} # coding=utf-8
import tkinter as tk
window = tk.Tk()
window.title('my window')
window.geometry('200x200')
var = tk.StringVar() # 保存一个字符串类型数据
l = tk.Label(window, bg = 'yellow', width = 25, text = 'empty')
l.pack()
def print_selection():
l.config(text = 'you have selected ' + var.get())
# get方法为获取 var 所保存的变量值 value
# 定义函数,重新配置 label 的显示文本text内容
var.set(0) # set 为 StringVar 的设置方法,下面代码中有把它和 Radiobutton 单选按钮绑定
radio_button1 = tk.Radiobutton(window,
text = 'Option A',
variable = var, value = 'A',
command = print_selection)
# text 是单选按钮所显示文本,并非其所存储的值 value
# variable通过传入特定参数 variable 直接和一个程序变量绑定tk.StringVar()
# 而且是双向绑定,如果该变量发生改变, 与该变量绑定的控件也会随之更新
# command 就是按钮,在单选按钮中就是选中的意思,如果选中则执行该函数
# 而该函数才是 var.get 的直接执行者,将单选按钮值 value重新配置在 label 的 text
radio_button1.pack()
radio_button2 = tk.Radiobutton(window,
text = 'Option B',
variable = var, value = 'B',
command = print_selection)
radio_button2.pack()
radio_button3 = tk.Radiobutton(window,
text = 'Option C',
variable = var, value = 'C',
command = print_selection)
radio_button3.pack()
window.mainloop()
为什么普通变量不行必须要 tk.StringVar()
这个叫做 数据绑定 (源于c#的概念)类似于数据描述符
你修改它之后 GUI界面上混入的这个值随之改变这是数据影响视图
同理 如果你这个是个输入框绑定的变量 你在输入框中输入要使 变量也要随之改变 这是视图影响数据
Daniel_Zhang 发表于 2021-1-23 00:53
emmmmmmm,接受建议,但是还是挺想学 tkinter的,就先学这个啦
我也想学tkinter 1406598279 发表于 2021-1-23 12:11
我也想学tkinter
小甲鱼的 python 里面有挺多 tkinter 的内容
b站上面也有很多{:10_248:} {:10_256:}{:10_256:}{:10_256:} 这是什么代码 这是什么代码 {:10_254:} 果然厉害
页:
[1]