【问题标题】:Python Tkinter OOP Layout ConfigurationPython Tkinter OOP 布局配置
【发布时间】:2021-08-17 14:46:58
【问题描述】:

我正在尝试使用 tkinter 构建应用程序。 布局在没有 OO 原则的情况下工作,但我很难理解如何将其移至 OO。

布局如下图所示。 (1280x720 像素)


我有以下几点:

  • 顶部带有用户名/欢迎消息和徽标右角的横幅,columnspan=8
  • 左侧带有按钮的菜单栏,分为 2 行(row1:rowspan 6,row2:rowspan=4)
  • 具有框架的工作区(白色块),我将在其中添加一个笔记本,每个菜单按钮打开一个不同的笔记本页面。

制作这个 OO 的最佳方法是什么? (我还在学习,对 OO 还很陌生)

【问题讨论】:

  • 如果您想将代码从面向过程更改为面向对象,并且您认为有一种神奇的方法可以避免编写新代码,那您就错了。我的建议是,保留您的工作示例。只是因为它有效。在学习 OOP 时,您可以通过几乎复制和粘贴来翻译代码。它仍然需要一些努力,但是当你搞砸你的工作示例时你不会生气。
  • 最好的办法是先真正学习OOP,然后再翻译。

标签: python oop tkinter layout


【解决方案1】:

没有直接的翻译可能,因为一切都取决于您的需求。 如果您创建一个简单的程序,您可以只创建类并在构造函数中创建每个 Button、Label、Frame...。创建后,您必须选择布局管理器网格、包装或位置之一。之后你创建你的函数,你就完成了。如果您处理更大的项目并且有大量的标签、按钮等。您可能希望为每个项目创建容器。 在您的情况下,您不需要很多功能和按钮,因此您应该采用基本方法:

from tkinter import *

class name_gui:
    def __init__(self, top):

#specify main window

        self.top = top
        self.title = top.title("name_gui")
        self.minsize = top.geometry("1280x720")
        self.resizable = top.resizable(height=False,width=False)

#create buttons,Labels,Frames..

        self.Button1 = Button(top,text="Button1",command=self.exa_fun)
        self.Button2 = Button(top,text="Button2",command=self.exa_fun2)

#place them, choose grid/place/pack

        self.Button1.place(relx=0.5,rely=0.5)
        self.Button2.place(relx=0.5,rely=0.2)


#create your functions
    
    def exa_fun(self):
        pass

    def exa_fun2(self):
        pass


top = Tk()
exa_gui = name_gui(top)
top.mainloop()

【讨论】:

  • 谢谢你,这很有效,在我的尝试中,我在某个地方犯了一个错误,一直打开双窗口。这运作良好。欣赏它
  • 不客气。这里应该有你需要的一切:docs.python.org/3/library/tkinter.html
猜你喜欢
  • 2021-06-12
  • 2017-12-24
  • 2023-04-05
  • 2013-05-11
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多