qin_yin 发表于 2020-11-26 22:26:49

tk条件判断

本帖最后由 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默认没有被勾上

Twilight6 发表于 2020-11-26 22:36:13

本帖最后由 Twilight6 于 2020-11-26 22:38 编辑



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

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

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

import tkinter as tk

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

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

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

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

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

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

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

var1 = tk.StringVar()
var1.set(0)
var2 = tk.StringVar()
var2.set(0)
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()

qin_yin 发表于 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()

qin_yin 发表于 2020-11-26 22:50:21

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

textvariable被翻译了

Twilight6 发表于 2020-11-26 22:56:10

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



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

你更改这个变量,而 Label 上的文本并不会因此而改变

笨鸟学飞 发表于 2020-11-26 23:20:35

你的方法其实也是可以实现的,看我注释的改动的几个地方吧。。。
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():
# 这里都写错了,正确的写法是var1.get() == 1
    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() # 这里写错了,var1=IntVar(),是整数
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()
页: [1]
查看完整版本: tk条件判断