鱼C论坛

 找回密码
 立即注册
查看: 1695|回复: 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): 函数中用一个条件来切换好理解.
有高手能指出其中的原因吗?

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

使用道具 举报

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

说错了,选中返回的值时value对应的值
也就是0 和 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 06:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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