问题描述
我试图制作一个可以适应不同框架的应用程序,但是我遇到了一个看似基本的问题,但它对我来说是新问题,不知道如何解决。如何使用位置在框架上移动小部件?
当我尝试在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)