【问题标题】:Tkinter Dynamic Widget editingTkinter 动态小部件编辑
【发布时间】:2017-01-15 05:17:42
【问题描述】:

这是我的代码:

class render_window:
    def __init__(self, height, width, window_title):
        self.root_window = Tk()
        w = width
        h = height
        ws = self.root_window.winfo_screenwidth() # width of the screen
        hs = self.root_window.winfo_screenheight() # height of the screen
        x = (ws/2) - (w/2)
        y = (hs/2) - (h/2)
        self.root_window.title(window_title)
        self.root_window.minsize(width, height)
        self.root_window.geometry('%dx%d+%d+%d' % (w, h, x, y))

    def new_button(self, button_text, button_command="", grid_row=0, grid_column=0, grid_sticky="NESW", grid_columnspan=1, grid_rowspan=1):
        self.button = ttk.Button(self.root_window, text=button_text, command=button_command)
        self.button.grid(row=grid_row, column=grid_column, sticky=grid_sticky, columnspan=grid_columnspan, rowspan=grid_rowspan)
        self.responsive_grid(grid_row, grid_column)

    def new_label(self, label_text, text_alignment="center", grid_row=0, grid_column=0, grid_sticky="NESW", grid_columnspan=1, grid_rowspan=1):
        self.label = ttk.Label(self.root_window, text=label_text, anchor=text_alignment)
        self.label.grid(row=grid_row, column=grid_column, sticky=grid_sticky, columnspan=grid_columnspan, rowspan=grid_rowspan)
        self.responsive_grid(grid_row, grid_column)

    def new_progress_bar(self, pg_length=250, pg_mode="determinate", grid_row=0, grid_column=0, grid_sticky="NESW", grid_columnspan=1, grid_rowspan=1):
        self.progress_bar = ttk.Progressbar(self.root_window, length=pg_length, mode=pg_mode)
        self.progress_bar.grid(row=grid_row, column=grid_column, sticky=grid_sticky, columnspan=grid_columnspan, rowspan=grid_rowspan)
        self.responsive_grid(grid_row, grid_column)

    def responsive_grid(self, row_responsive=0, column_responsive=0, row_weight_num=1, column_weight_num=1):
        self.root_window.grid_columnconfigure(column_responsive, weight=column_weight_num)
        self.root_window.grid_rowconfigure(row_responsive, weight=row_weight_num)

options_window = render_window(200, 250, "Options Window")

options_window.new_progress_bar()
options_window.progress_bar.start()
options_window.new_progress_bar(grid_column=1)
options_window.progress_bar.start()
options_window.new_label("Options Window\And other buttons...", grid_row=1, grid_columnspan=2)

options_window.root_window.mainloop()

我创建了一个系统,允许使用 tkinter 相对轻松地创建界面。我在修改现有元素时遇到问题,如果我创建多个实例,我似乎无法修改它们,我只能编辑最后一个创建的实例。当我说修改/编辑时,我指的是 .config()。

所以每当我这样做时: options_window.progress_bar.config(args_here),它只对创建的最后一个 bar 执行此操作。有没有办法指定我可以在哪个栏上执行代码?

谢谢!

【问题讨论】:

  • 使用列表或字典来保存对每个小部件的引用
  • @BryanOakley,我该怎么做?

标签: python class python-3.x user-interface tkinter


【解决方案1】:

如果我对您的理解正确...您能否不将每个进度条分配给一个变量?即。

pb1 = options_window.progress_bar
pb1.start()
pb1.conig('etc, etc')

对不起,如果我误解了您的问题!

PS - 好主意!

【讨论】:

  • 我完全忘记了这一点。让我更新和测试我的代码。谢谢您的快速回复!
  • 编辑:刚拿到,会做更多的测试。存在代码错误。我修好了它。您可能想要删除进度条变量的“()”。这不是一个函数。
  • 一旦你更新你的答案,我会这样标记它。感谢您的帮助!
  • 嗨,Elliot,我已经删除了括号。现在看起来还可以吗?
  • 正如布赖恩所说,您可以将变量附加到列表中,并一次或单独遍历它们。 IE [pb1, pb2]
猜你喜欢
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
相关资源
最近更新 更多