Daniel_Zhang 发表于 2021-1-23 00:48:32

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 结贴迅速,如果是最佳,绝不拖拉~

°蓝鲤歌蓝 发表于 2021-1-23 00:51:05

建议用 Pysimplegui

Daniel_Zhang 发表于 2021-1-23 00:53:17

°蓝鲤歌蓝 发表于 2021-1-23 00:51
建议用 Pysimplegui

emmmmmmm,接受建议,但是还是挺想学 tkinter的,就先学这个啦{:10_248:}

°蓝鲤歌蓝 发表于 2021-1-23 01:15:56

Daniel_Zhang 发表于 2021-1-23 00:53
emmmmmmm,接受建议,但是还是挺想学 tkinter的,就先学这个啦

看了一下源码,
radio_button1.pack()
这一步最后调用的应该是 C 语言拓展了。

°蓝鲤歌蓝 发表于 2021-1-23 01:20:03

本帖最后由 °蓝鲤歌蓝 于 2021-1-23 01:22 编辑

我猜测是 pack的时候将 value = 'A' 的值传到队列里,然后调用回调函数,然后 var 通过 get 从队列里取值。

心驰神往 发表于 2021-1-23 08:05:06

{:10_256:}

qq1151985918 发表于 2021-1-23 09:00:22

# 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()

kogawananari 发表于 2021-1-23 10:51:06

为什么普通变量不行必须要 tk.StringVar()

这个叫做 数据绑定 (源于c#的概念)类似于数据描述符
你修改它之后 GUI界面上混入的这个值随之改变这是数据影响视图
同理 如果你这个是个输入框绑定的变量 你在输入框中输入要使 变量也要随之改变 这是视图影响数据

1406598279 发表于 2021-1-23 12:11:53

Daniel_Zhang 发表于 2021-1-23 00:53
emmmmmmm,接受建议,但是还是挺想学 tkinter的,就先学这个啦

我也想学tkinter

Daniel_Zhang 发表于 2021-1-23 15:23:35

1406598279 发表于 2021-1-23 12:11
我也想学tkinter

小甲鱼的 python 里面有挺多 tkinter 的内容

b站上面也有很多{:10_248:}

SomeThing9 发表于 2021-1-30 14:41:35

{:10_256:}{:10_256:}{:10_256:}

yiranlinan 发表于 2021-1-30 22:14:51

这是什么代码

玖玥 发表于 2021-1-31 10:11:44

这是什么代码

小古比鱼 发表于 2021-1-31 17:30:57

{:10_254:}

攸鱼 发表于 2021-2-1 10:42:32

果然厉害
页: [1]
查看完整版本: tkinter 不太理解