【问题标题】:How to change the attributes of a Tkinter Frame subclass?如何更改 Tkinter Frame 子类的属性?
【发布时间】:2020-10-02 23:47:26
【问题描述】:

上下文

我正在为一些学生在 Python 3.8 中使用 Tkinter 开发一个应用程序,让他们输入一些解决数学问题的方法,然后检查它们是否正确。

接近

每个小部件(或小部件组)都组织到一个 ttk.Frame 子类中,然后在 MainWindow 类中实例化,该类使用 .grid() 几何管理器组织它们。例如:

class Questions(ttk.Frame):
    def __init__(self, master):
        super().__init__(master)
        question_style = ttk.Style(self)
        question_style.configure("q.TLabel", padding=30)
        question = ttk.Label(self, text=f"{QA[q_number][0]}",
                             justify=tk.CENTER, style="q.TLabel")
        question.pack(fill=tk.BOTH)

上面的 Questions 类负责显示问题。我对几乎每个小部件都采用了相同的方法 - 导航按钮、输入字段等。我采用这种方法是因为我认为它可以为我提供最大的设计灵活性,因为我不仅可以更改每个小部件的外观,而且还可以放置它们的框架(根据我的经验,学生在审美上可能非常挑剔)。

问题

我不知道如何更改放置小部件的框架的属性。例如,我将如何更改框架的高度和宽度?我尝试了以下方法,但无济于事:

class Questions(ttk.Frame):
    def __init__(self, master):
        super().__init__(master)

        self.height = 50
        self.width = 50

        question_style = ttk.Style(self)
        question_style.configure("q.TLabel", padding=30)
        question = ttk.Label(self, text=f"{QA[q_number][0]}",
                             justify=tk.CENTER, style="q.TLabel")
        question.pack(fill=tk.BOTH)

我也试过self.configure(height=50),但也没有用。

如何更改放置这些小部件的框架? 有没有更好的方法来解决这个问题?我应该放弃 Frame 子类方法吗?

非常感谢任何帮助。谢谢。

附言我不太确定如何措辞这个问题,所以对此的任何建议也很感激。

【问题讨论】:

  • 试过self.configure(height=50),但也没有用。:这是一个有效的声明,但默认情况下Frame 小部件缩小到里面放置的小部件的大小,这里是Label,这取决于你如何布局你没有向我们展示的Frame。阅读The Tkinter Frame Widget
  • 您是在问如何更改任何属性,还是专门在问如何更改宽度和高度?宽度和高度是特殊的,而不是您通常会做的事情。框架旨在完全适合他们的孩子和/或完全适合他们父母给他们的空间。

标签: python tkinter tk ttk


【解决方案1】:

我不太了解Tkinter,但是你有没有试过把参数传递给超类的构造函数?

super().__init__(self, width=50, height=50)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-20
    • 2017-04-18
    • 1970-01-01
    • 2020-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多