部件在不同部件上使用python 3 tkinter时,该部件被识别为框架

问题描述

我试图制作一个可以适应不同框架的应用程序,但是我遇到了一个看似基本的问题,但它对我来说是新问题,不知道如何解决。如何使用位置在框架上移动小部件? 当我尝试在about_btn上使用此代码时:
self.about_btn.place(rely=0.5)

然后,“开始”按钮被“关于”按钮覆盖了一半,我想知道为什么这样做以及如何解决?使用较高的依赖值按钮将被不同的框架覆盖。我想使用位置真正地移动小部件并将它们移动到特定的框架上。任何对代码的帮助和建议或改进都将非常有帮助,这是我的示例代码

import tkinter as tk
from tkinter import *


class App():
    def __init__(self,parent):
        self.app = parent
        self.app.geometry("300x300")
        self.app.title("test application")

        self.home_frame = tk.Frame(self.app)
        self.category_frame = tk.Frame(self.app)
        self.home_frame.pack()

        self.start_btn = tk.Button(self.home_frame,text="Start")
        self.start_btn.pack()

        self.about_btn = tk.Button(self.home_frame,text="About")
        self.about_btn.place(rely=0.5)

if __name__ == "__main__":
    app1 = tk.Tk()
    App_class = App(app1)
    app1.resizable(False,False)
    app1.mainloop()

解决方法

请勿在容器内混合使用几何管理算法。您在pack容器中都将start_btn的{​​{1}}和place的{​​{1}}都使用。选择一个-理想的是网格或打包。地方通常不明智。

例如,要将按钮排在顶部和右侧的行中:

about_btn

使用地点:

home_frame

坦率地说,学习使用网格。这将是值得的。这是经过重做的版本,说明了两个按钮的所有三个几何管理器。

self.home_frame.pack(side=tk.TOP,fill=tk.BOTH,expand=True)
self.about_btn.pack(side=tk.RIGHT,anchor=tk.NE)
self.start_btn.pack(side=tk.RIGHT,anchor=tk.NE)