我正在使用tkinter使用网格构建GUI。我需要将所有对象置于窗口中心。所有问题和按钮的长度都是不同的,因此对于不占据整个窗口的较短问题和按钮,我希望它们在x轴上居中。
我已经研究了这个问题,并找到了一个使用place的解决方案,但是我必须重写整个应用程序,因为它当前正在使用网格。
def createWidgets(self):
self.question = tk.Label(self, text="What is Prague the capital of?\n")
self.question.grid(row=1, column=1, columnspan=2)
self.option1 = tk.Button(self, width=12)
self.option1["text"] = "Romania"
self.option1["command"] = self.wrong1
self.option1.grid(column=1, row=2, padx=1, pady=1)
self.option2 = tk.Button(self, width=12)
self.option2["text"] = "Slovakia"
self.option2["command"] = self.wrong1
self.option2.grid(column=2, row=2, padx=1, pady=1)
self.option3 = tk.Button(self, width=12)
self.option3["text"] = "Czech Republic"
self.option3["command"] = self.correct1
self.option3.grid(column=1, row=3, padx=1, pady=1)
self.option4 = tk.Button(self, width=12)
self.option4["text"] = "Ukraine"
self.option4["command"] = self.wrong1
self.option4.grid(column=2, row=3, padx=1, pady=1)
我想将所有内容都置于createWidgets内部,以便它始终始于y轴的顶部,但始终位于x轴的中间。
我现在使用root.geometry("250x160")
来调整窗口大小,
root.resizable(0, 0)
停止调整其大小的变量。
答案 0 :(得分:1)
我假设您的课程是从tk.Frame
继承的。您不必在类中进行任何修改-而是通过传递pack
和fill
来更改框架expand
的方式。
import tkinter as tk
class MainFrame(tk.Frame):
def __init__(self,master=None,**kwargs):
tk.Frame.__init__(self,master,**kwargs)
self.question = tk.Label(self, text="What is Prague the capital of?\n")
self.question.grid(row=1, column=1, columnspan=2)
self.option1 = tk.Button(self, width=12)
self.option1["text"] = "Romania"
#self.option1["command"] = self.wrong1
self.option1.grid(column=1, row=2, padx=1, pady=1)
self.option2 = tk.Button(self, width=12)
self.option2["text"] = "Slovakia"
#self.option2["command"] = self.wrong1
self.option2.grid(column=2, row=2, padx=1, pady=1)
self.option3 = tk.Button(self, width=12)
self.option3["text"] = "Czech Republic"
#self.option3["command"] = self.correct1
self.option3.grid(column=1, row=3, padx=1, pady=1)
self.option4 = tk.Button(self, width=12)
self.option4["text"] = "Ukraine"
#self.option4["command"] = self.wrong1
self.option4.grid(column=2, row=3, padx=1, pady=1)
root = tk.Tk()
frame = MainFrame(root)
frame.pack(fill=tk.Y,expand=True)
root.mainloop()
如果即使在根级别也要使用grid
,则可以使用以下内容:
root = tk.Tk()
frame = MainFrame(root)
frame.grid(row=0,column=0,sticky="ns")
root.grid_columnconfigure(0,weight=1)
root.mainloop()
答案 1 :(得分:0)