Nate_2020 发表于 2021-10-6 17:16:54

python tkinter问题

想不明白def switch_show(self): 函数中 self.scale['showvalue'] = self.showVar.get() 怎么可以让tk.YES和tk.NO切换来切换去?
不像 def switch_orient(self): 函数中用一个条件来切换好理解.
有高手能指出其中的原因吗?


import tkinter as tk
from tkinter import ttk

class App:
    def __init__(self, master):
      self.master = master
      self.initWidgets()

    def initWidgets(self):
      self.scale = tk.Scale(self.master,
                              from_=-100,
                              to = 100,
                              resolution=5,
                              label='Scale示例',
                              length=400,
                              width=30,
                              troughcolor='lightblue',
                              sliderlength=20,
                              sliderrelief=tk.SUNKEN,
                              showvalue=tk.YES,
                              orient=tk.HORIZONTAL
                              )
      self.scale.pack()
      # 创建一个 Frame 作为容器
      f = tk.Frame(self.master)
      f.pack(fill=tk.X, expand=tk.YES, padx=10)
      tk.Label(f, text='是否显示值: ').pack(side=tk.LEFT)
      i = 0
      self.showVar = tk.IntVar()
      self.showVar.set(1)
      # 创建2个 Radiobutton 控制 scale 是否显示值
      for s in ('不显示','显示'):
            tk.Radiobutton(f,text=s,value=i,variable=self.showVar,
                           command=self.switch_show).pack(side=tk.LEFT)
            i += 1
            
      f2 = tk.Frame(self.master)
      f2.pack(fill=tk.X,expand=tk.YES,padx=10)
      tk.Label(f2,text='方向: ').pack(side=tk.LEFT)
      j = 0
      self.orientVar = tk.IntVar()
      self.orientVar.set(0)
      # 创建2个 Radiobutton 控制 Scale 的方向
      for s in ('水平','垂直'):
            tk.Radiobutton(f2,text=s,value=j,variable=self.orientVar,
                           command=self.switch_orient).pack(side=tk.LEFT)
            j += 1

    def switch_show(self):
      self.scale['showvalue'] = self.showVar.get()
    def switch_orient(self):
      self.scale['orient'] = tk.VERTICAL if self.orientVar.get() else tk.HORIZONTAL

root = tk.Tk()
root.title('Scale 测试')
App(root)
root.mainloop()

大马强 发表于 2021-10-6 17:31:41

self.showVar.get() 是与 Radiobutton 关联的变量,当你点击 Radiobutton 选项时,那个函数就会获取当前点击的选项对应的下标赋值给self.scale['showvalue'] 也就实现了 0 1 切换
NO=FALSE=OFF=0
YES=TRUE=ON=1

大马强 发表于 2021-10-6 17:39:11

大马强 发表于 2021-10-6 17:31
self.showVar.get() 是与 Radiobutton 关联的变量,当你点击 Radiobutton 选项时,那个函数就会获取当前点 ...

说错了,选中返回的值时value对应的值
也就是0 和 1
页: [1]
查看完整版本: python tkinter问题