繁体   English   中英

Tkinter:如何使用 scale-widget 的值来更改 label-widget 的文本?

[英]Tkinter: How do I use the value of a scale-widget to change the text of a label-widget?

我正在尝试实现一个简单的难度滑块,所以我创建了一个比例小部件。

使用 slider,用户可以 select 进行他想玩的难度设置。 我还想要一个显示所选难度的标签小部件(简单,普通,困难,usw ...)

所以 scale-widget 的值被用来不断更新 label-widget 的文本。 我编写了以下代码,但它似乎没有按预期工作。 我认为 Adjust_scl 函数有问题。 你能帮帮我吗?

一般来说,我对 Tk 和 Python 很陌生。

from tkinter import *

root = Tk()
root.title("Difficulty")
        

class Difficulty:

    def __init__ (self, master):
    
         global vel_1
         vel_1 = IntVar()

         self.dif_scale = Scale(master,variable = vel_1,from_ = 3,to = -3,resolution=1, orient=HORIZONTAL, length=450,tickinterval=1, label="Your Dice Roll Modifier",showvalue=0,command=self.Adjust_scl)
         self.dif_scale.pack()

         self.dif_label = Label(master)
         self.dif_label.pack()

    
    def Adjust_scl(self,random_parameter):

        if vel_1 == 0:
        self.dif_label.config(text="Normal")
        elif vel_1 == -1:
        self.dif_label.config(text="Challenging")
        elif vel_1 == -2:
        self.dif_label.config(text="Hard")
        elif vel_1 == -3:
        self.dif_label.config(text="Insane")
        elif vel_1 == 1:
        self.dif_label.config(text="Easy")
        elif vel_1 == 2:
        self.dif_label.config(text="Walk in the Park")
        elif vel_1 == 3:
        self.dif_label.config(text="Storymode")



dif = Difficulty(root)

root.mainloop()

顺便说一下,Adjust_scl 函数拒绝在没有 random_parameter 的情况下工作。

您需要使用 get() 从刻度中获取值,并且需要修复 if/elifs 的缩进。

   def Adjust_scl(self,random_parameter):

        if vel_1.get() == 0:          
            self.dif_label.config(text="Normal")
        elif vel_1.get() == -1:
            self.dif_label.config(text="Challenging")
        elif vel_1.get() == -2:
            self.dif_label.config(text="Hard")
        elif vel_1.get() == -3:
            self.dif_label.config(text="Insane")
        elif vel_1.get() == 1:
            self.dif_label.config(text="Easy")
        elif vel_1.get() == 2:
            self.dif_label.config(text="Walk in the Park")
        elif vel_1.get() == 3:
            self.dif_label.config(text="Storymode")

您可能还需要考虑将级别的文本放入列表中。

如果你这样做了,你就不需要长的 if/elif 代码。

这是带有级别列表的代码,并使用 self.vel_1 所以你不需要使用全局。

from tkinter import *

root = Tk()
root.title("Difficulty")
        
class Difficulty:

    def __init__ (self, master):
    
         self.vel_1 = IntVar()
         self.levels = ['Insane', 'Hard', 'Challenging', 'Normal', 'Easy', 'Walk in the Park', 'Story Mode']
         self.dif_scale = Scale(master,variable = self.vel_1,from_ = 3,to = -3,resolution=1, orient=HORIZONTAL, length=450,tickinterval=1, label="Your Dice Roll Modifier",showvalue=0,command=self.Adjust_scl)
         self.dif_scale.pack()

         self.dif_label = Label(master)
         self.dif_label.pack()

    def Adjust_scl(self,random_parameter):

        level = self.vel_1.get()+3
        print(level)
        self.dif_label.config(text=self.levels[level])
        
dif = Difficulty(root)

root.mainloop()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM