Я пытаюсь создать класс индикатора выполнения, который сочетает в себе стандартный индикатор выполнения с меткой, показывающей процент заполнения индикатора. Это значение затем можно обновить, чтобы показать процент завершения. Сам класс работает нормально, но есть две проблемы с попыткой разместить как виджеты в классе, так и сам класс.
Когда я использую pack(side = tk.LEFT)
, виджеты правильно упаковываются в класс. Однако затем, когда я использую этот класс в своей основной программе (которая управляется сеткой), метка исчезает.
Во-вторых, использование grid()
с правильным интервалом столбцов в моем классе складывает два виджета поверх каждого другие, а не бок о бок, как предполагалось. При попытке использовать класс в моей основной программе я получаю сообщение об ошибке:
_tkinter.TclError: cannot use geometry manager pack inside . which already has slaves managed by grid
Код здесь:
import tkinter as tk
import tkinter.ttk as ttk
class ProgressBarPercent(tk.Frame):
def __init__(self, parent, orient, length, mode):
tk.Frame.__init__(self, parent)
self.progress = ttk.Progressbar(self, orient = orient,
length = length, mode = mode)
self.text = tk.StringVar()
self.text.set("0%")
self.percent = tk.Label(textvariable = self.text)
self.percent.grid(column=0, row=0)
self.progress.grid(column=1, row=0)
def value(self, value):
self.progress['value'] = value
percent_value = round(value, 1)
self.text.set(str(percent_value) + '%')
if __name__ == "__main__":
root = tk.Tk()
progress = ProgressBarPercent(root, orient = tk.HORIZONTAL,
length = 100, mode = 'determinate')
progress.grid()
progress.value(37.322)
root.mainloop()