鱼C论坛

 找回密码
 立即注册
查看: 2349|回复: 14

[已解决]tkinter 不太理解

[复制链接]
发表于 2021-1-23 00:48:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-23 00:51:05 | 显示全部楼层

回帖奖励 +2 鱼币

建议用 Pysimplegui
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-23 00:53:17 | 显示全部楼层

emmmmmmm,接受建议,但是还是挺想学 tkinter的,就先学这个啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-23 01:15:56 | 显示全部楼层
Daniel_Zhang 发表于 2021-1-23 00:53
emmmmmmm,接受建议,但是还是挺想学 tkinter的,就先学这个啦

看了一下源码,
radio_button1.pack()
这一步最后调用的应该是 C 语言拓展了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-23 01:20:03 | 显示全部楼层
本帖最后由 °蓝鲤歌蓝 于 2021-1-23 01:22 编辑

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

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
Daniel_Zhang + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-23 08:05:06 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-23 09:00:22 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +2 鱼币

# 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()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-23 10:51:06 | 显示全部楼层
为什么普通变量不行必须要 tk.StringVar()

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

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
Daniel_Zhang + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-23 12:11:53 | 显示全部楼层
Daniel_Zhang 发表于 2021-1-23 00:53
emmmmmmm,接受建议,但是还是挺想学 tkinter的,就先学这个啦

我也想学tkinter
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-1-23 15:23:35 | 显示全部楼层

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

b站上面也有很多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-1-30 14:41:35 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-1-30 22:14:51 | 显示全部楼层
这是什么代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-31 10:11:44 | 显示全部楼层

回帖奖励 +2 鱼币

这是什么代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-1-31 17:30:57 | 显示全部楼层

回帖奖励 +2 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-2-1 10:42:32 | 显示全部楼层

回帖奖励 +2 鱼币

果然厉害
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-16 16:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表