鱼C论坛

 找回密码
 立即注册
查看: 1905|回复: 2

[已解决]python tkinter问题

[复制链接]
发表于 2021-10-6 17:16:54 | 显示全部楼层 |阅读模式

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

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

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


  1. import tkinter as tk
  2. from tkinter import ttk

  3. class App:
  4.     def __init__(self, master):
  5.         self.master = master
  6.         self.initWidgets()

  7.     def initWidgets(self):
  8.         self.scale = tk.Scale(self.master,
  9.                               from_=-100,
  10.                               to = 100,
  11.                               resolution=5,
  12.                               label='Scale示例',
  13.                               length=400,
  14.                               width=30,
  15.                               troughcolor='lightblue',
  16.                               sliderlength=20,
  17.                               sliderrelief=tk.SUNKEN,
  18.                               showvalue=tk.YES,
  19.                               orient=tk.HORIZONTAL
  20.                               )
  21.         self.scale.pack()
  22.         # 创建一个 Frame 作为容器
  23.         f = tk.Frame(self.master)
  24.         f.pack(fill=tk.X, expand=tk.YES, padx=10)
  25.         tk.Label(f, text='是否显示值: ').pack(side=tk.LEFT)
  26.         i = 0
  27.         self.showVar = tk.IntVar()
  28.         self.showVar.set(1)
  29.         # 创建2个 Radiobutton 控制 scale 是否显示值
  30.         for s in ('不显示','显示'):
  31.             tk.Radiobutton(f,text=s,value=i,variable=self.showVar,
  32.                            command=self.switch_show).pack(side=tk.LEFT)
  33.             i += 1
  34.             
  35.         f2 = tk.Frame(self.master)
  36.         f2.pack(fill=tk.X,expand=tk.YES,padx=10)
  37.         tk.Label(f2,text='方向: ').pack(side=tk.LEFT)
  38.         j = 0
  39.         self.orientVar = tk.IntVar()
  40.         self.orientVar.set(0)
  41.         # 创建2个 Radiobutton 控制 Scale 的方向
  42.         for s in ('水平','垂直'):
  43.             tk.Radiobutton(f2,text=s,value=j,variable=self.orientVar,
  44.                            command=self.switch_orient).pack(side=tk.LEFT)
  45.             j += 1

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

  50. root = tk.Tk()
  51. root.title('Scale 测试')
  52. App(root)
  53. 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
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-6 17:31:41 | 显示全部楼层    本楼为最佳答案   
self.showVar.get() 是与 Radiobutton 关联的变量,当你点击 Radiobutton 选项时,那个函数就会获取当前点击的选项对应的下标赋值给self.scale['showvalue'] 也就实现了 0 1 切换
NO=FALSE=OFF=0
YES=TRUE=ON=1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

说错了,选中返回的值时value对应的值
也就是0 和 1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 00:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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