鱼C论坛

 找回密码
 立即注册
查看: 1220|回复: 5

[已解决]tk条件判断

[复制链接]
发表于 2020-11-26 22:26:49 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 qin_yin 于 2020-11-26 22:28 编辑

import tkinter as tk


import tkinter as tk

root = tk.Tk()
root.title('This is My Tk')
root.geometry('300x300')

label = tk.Label(master=root, text='What language do you like ', bg='yellow', width=22, height=4, font=('微软雅黑', 15))
label.pack()


def print_choice():
    if var1 == 1 and var2 == 1:
        label.config(text='I like it all')

    elif var1 == 1 and var2 == 0:
        label.config(text='I like it python')

    elif var1 == 0 and var2 == 1:
        label.config(text='I like C++')

    else:
        label.config(text='I don`t like it')


var1 = tk.StringVar()
var2 = tk.StringVar()
py_button = tk.Checkbutton(master=root, text='Pyhton',width=20, height=4, font=('微软雅黑', 15,),
                           variable=var1, onvalue=1, offvalue=0, command=print_choice)
C_button = tk.Checkbutton(master=root, text='C++', width=20,height=4, font=('微软雅黑',15),
                          variable=var2, onvalue=1, offvalue=0, command=print_choice)

py_button.pack()
C_button.pack()

root.mainloop()


问题:无论我怎么点击label内容只会发生一次改变,(改变成 I don`t like it),为什么默认选项是勾上的,我想让Checkbutton默认没有被勾上
最佳答案
2020-11-26 22:36:13
本帖最后由 Twilight6 于 2020-11-26 22:38 编辑



想实时刷新 text 需要用 textvariable 参数 而不是 text

而且组件中 var1、var2 需要 .get() 方法才能获取属性

而且获取返回的是字符串,所以函数 if 判断那都需要更改

  1. import tkinter as tk

  2. root = tk.Tk()
  3. root.title('This is My Tk')
  4. root.geometry('300x300')

  5. v = tk.StringVar()
  6. v.set('What language do you like ')

  7. label = tk.Label(master=root, textvariable=v, bg='yellow', width=22, height=4, font=('微软雅黑', 15))
  8. label.pack()

  9. def print_choice():
  10.     if var1.get() == '1' and var2.get() == '1':
  11.         v.set('I like it all')

  12.     elif var1.get() == '1' and var2.get() == '0':
  13.         v.set('I like it python')

  14.     elif var1.get() == '0' and var2.get() == '1':
  15.         v.set('I like C++')

  16.     else:
  17.         v.set('I don`t like it')

  18. var1 = tk.StringVar()
  19. var1.set(0)
  20. var2 = tk.StringVar()
  21. var2.set(0)
  22. py_button = tk.Checkbutton(master=root, text='Pyhton',width=20, height=4, font=('微软雅黑', 15,),
  23.                            variable=var1, onvalue=1, offvalue=0, command=print_choice)
  24. C_button = tk.Checkbutton(master=root, text='C++', width=20,height=4, font=('微软雅黑',15),
  25.                           variable=var2, onvalue=1, offvalue=0, command=print_choice)

  26. py_button.pack()
  27. C_button.pack()

  28. root.mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-26 22:36:13 | 显示全部楼层    本楼为最佳答案   
本帖最后由 Twilight6 于 2020-11-26 22:38 编辑



想实时刷新 text 需要用 textvariable 参数 而不是 text

而且组件中 var1、var2 需要 .get() 方法才能获取属性

而且获取返回的是字符串,所以函数 if 判断那都需要更改

  1. import tkinter as tk

  2. root = tk.Tk()
  3. root.title('This is My Tk')
  4. root.geometry('300x300')

  5. v = tk.StringVar()
  6. v.set('What language do you like ')

  7. label = tk.Label(master=root, textvariable=v, bg='yellow', width=22, height=4, font=('微软雅黑', 15))
  8. label.pack()

  9. def print_choice():
  10.     if var1.get() == '1' and var2.get() == '1':
  11.         v.set('I like it all')

  12.     elif var1.get() == '1' and var2.get() == '0':
  13.         v.set('I like it python')

  14.     elif var1.get() == '0' and var2.get() == '1':
  15.         v.set('I like C++')

  16.     else:
  17.         v.set('I don`t like it')

  18. var1 = tk.StringVar()
  19. var1.set(0)
  20. var2 = tk.StringVar()
  21. var2.set(0)
  22. py_button = tk.Checkbutton(master=root, text='Pyhton',width=20, height=4, font=('微软雅黑', 15,),
  23.                            variable=var1, onvalue=1, offvalue=0, command=print_choice)
  24. C_button = tk.Checkbutton(master=root, text='C++', width=20,height=4, font=('微软雅黑',15),
  25.                           variable=var2, onvalue=1, offvalue=0, command=print_choice)

  26. py_button.pack()
  27. C_button.pack()

  28. root.mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-26 22:49:15 | 显示全部楼层
本帖最后由 qin_yin 于 2020-11-26 22:50 编辑
Twilight6 发表于 2020-11-26 22:36
想实时刷新 text 需要用 textvariable 参数 而不是 text

而且组件中 var1、var2 需要 .get() 方法 ...


想实时刷新text需要使用textvariable参数而不是text,
为什么这样说,以下代码没有使用textvariable参数也做到了实时刷新,不太理解textvariable和text参数的区别
import tkinter as tk

root = tk.Tk()
root.title('This my fifth Tk')
root.geometry('300x300')

var = tk.StringVar()
var.set('You Are Here')

label = tk.Label(master=root, text='You Are Here')
label.pack()


def get_position(v):
    label.config(text='You Are Here %d'% scale.get())


scale = tk.Scale(master=root, from_=0, to=100, orient='horizontal', length=200, tickinterval=20,
                 command=get_position)
scale.pack()

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

使用道具 举报

 楼主| 发表于 2020-11-26 22:50:21 | 显示全部楼层
qin_yin 发表于 2020-11-26 22:49
想实时刷新text需要使用textvariable参数而不是text,
为什么这样说,以下代码没有使用textvariable参 ...

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

使用道具 举报

发表于 2020-11-26 22:56:10 | 显示全部楼层
qin_yin 发表于 2020-11-26 22:49
想实时刷新text需要使用textvariable参数而不是text,
为什么这样说,以下代码没有使用textvariable参 ...



这相当于重新赋值 text 参数,而正常情况你想用一个变量来赋值给 text 后

你更改这个变量,而 Label 上的文本并不会因此而改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-26 23:20:35 | 显示全部楼层
你的方法其实也是可以实现的,看我注释的改动的几个地方吧。。。
  1. import tkinter as tk


  2. import tkinter as tk

  3. root = tk.Tk()
  4. root.title('This is My Tk')
  5. root.geometry('300x300')

  6. label = tk.Label(master=root, text='What language do you like ', bg='yellow', width=22, height=4, font=('微软雅黑', 15))
  7. label.pack()


  8. def print_choice():
  9.   # 这里都写错了,正确的写法是var1.get() == 1
  10.     if var1 == 1 and var2 == 1:
  11.         label.config(text='I like it all')

  12.     elif var1 == 1 and var2 == 0:
  13.         label.config(text='I like it python')

  14.     elif var1 == 0 and var2 == 1:
  15.         label.config(text='I like C++')

  16.     else:
  17.         label.config(text='I don`t like it')


  18. var1 = tk.StringVar() # 这里写错了,var1=IntVar(),是整数
  19. var2 = tk.StringVar()
  20. py_button = tk.Checkbutton(master=root, text='Pyhton',width=20, height=4, font=('微软雅黑', 15,),
  21.                            variable=var1, onvalue=1, offvalue=0, command=print_choice)
  22. C_button = tk.Checkbutton(master=root, text='C++', width=20,height=4, font=('微软雅黑',15),
  23.                           variable=var2, onvalue=1, offvalue=0, command=print_choice)

  24. py_button.pack()
  25. C_button.pack()

  26. root.mainloop()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 01:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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