Моя проблема в том, что у меня есть шкала и счетчик, которые меняют значения друг друга. Пример OFr, если оба идут от 1 до 100, если я установил масштаб на 50, счетчик также изменится, и наоборот. теперь у меня это работает очень хорошо, за исключением одной незначительной проблемы. Я не могу заставить шкалу ttk увеличиваться целыми числами. Каждый раз, когда я меняю шкалу, я получаю тонну десятичных знаков после запятой. Вот мой код:

def create_widgets(self):
"""my widgets"""
    spinval = IntVar()

    self.scale = ttk.Scale(self, orient = HORIZONTAL,
                                   length = 200,
                                   from_ = 1, to = 100,
                                   variable = spinval)
    self.scale.grid(row = 3,column = 1,sticky = W)


    self.spinbox = Spinbox(self, from_ = 1, to = 100,
                                   textvariable = spinval,
                                   command = self.update,
                                   width = 10)
    self.spinbox.grid(row = 3,column =3,sticky = W)

def update(self, nothing):
    """Updates the scale and spinbox"""
    self.scale.set(self.spinbox.get())

Теперь мой вопрос: можно ли как-то увеличить его целыми числами или изменить графику нормальной шкалы Tkinter, чтобы она выглядела лучше. Любая помощь приветствуется.

3
Tobias Mielke 7 Июн 2013 в 08:48

1 ответ

Лучший ответ
def create_widgets(self):
    """my widgets"""
    spinval = IntVar()

    self.scale = ttk.Scale(self, orient=HORIZONTAL,
                                length=200,
                                from_=1, to=100,
                                variable=spinval,
                                command=self.accept_whole_number_only)
    self.scale.grid(row=3, column=1, sticky=W)


    self.spinbox = Spinbox(self, from_=1, to=100,
                                textvariable=spinval,
                                command=self.update,
                                width=10)
    self.spinbox.grid(row=3,column=3, sticky=W)

def accept_whole_number_only(self, e=None):
    value = self.scale.get()
    if int(value) != value:
        self.scale.set(round(value))

def update(self, e=None):
    """Updates the scale and spinbox"""
    self.scale.set(self.spinbox.get())
6
falsetru 7 Июн 2013 в 09:58