我的投诉
我目前比“以往任何时候”都更深入地研究 Tkinter GUI,并且我发现 .grid()
几何管理器的不足有几个原因:
图表基于其中最大的小部件 - 这种相对性会导致不准确。
在 Windows 7 中,在 Python 2.7.3 上,程序似乎不注意我的行号,而是更喜欢使用小部件的顺序。
我的代码
我目前正在开发一个真正基本的文本编辑器,我想在框架的顶部有多个按钮。我无法执行此操作,因为我的小部件放置在占据屏幕中央的大型文本框的最左侧或最右侧。
========Class __init__ Stuff============
def widget(self):#Place widgets here
#Save Button
self.saveButton = Button (self, text = "Save", command = self.saveMe)
self.saveButton.grid(column = 0, row = 0, sticky = W)
#Open Button
self.openButton = Button (self, text = "Open", command = self.openMe)
self.openButton.grid(column = 0, row = 1, sticky = W)
#Area where you write
self.text = Text (self, width = (root.winfo_screenwidth() - 20),
height = (root.winfo_screenheight() - 10))
self.text.grid(row = 2)
==============Mainloop/Command Stuff============
我的问题
是否有另一种方法可以更准确地使用 .grid()
几何管理器,或者我应该完全使用另一个函数?
谢谢!
最佳答案
您可以使用 3 个几何管理器 -- grid
、pack
和 place
。第三个是最通用的,但也很难用。我更喜欢 grid
。请注意,您可以将小部件放置在其他小部件内——或者您可以指定 columnspan
。所以,如果你想获得以下布局:
-------------------------
| Button1 | Button2 |
-------------------------
| Big Widget |
-------------------------
使用 .grid
有两种规范的方法。第一种方法是columnspan
:
import Tkinter as Tk
root = Tk.Tk()
b1 = Tk.Button(root,text="Button1")
b1.grid(row=0,column=0)
b2 = Tk.Button(root,text="Button2")
b2.grid(row=0,column=1)
big_widget = Tk.Canvas(root)
big_widget.grid(row=1,column=0,columnspan=2)
*请注意,还有一个完全类似的 rowspan
选项。
第二种方法是使用 Frame
来固定按钮:
import Tkinter as Tk
root = Tk.Tk()
f = Tk.Frame(root)
f.grid(row=0,column=0)
#place buttons on the *frame*
b1 = Tk.Button(f,text="Button1")
b1.grid(row=0,column=0)
b2 = Tk.Button(f,text="Button2")
b2.grid(row=0,column=1)
big_widget = Tk.Canvas(root)
big_widget.grid(row=1,column=0) #don't need columnspan any more.
此方法对于创建复杂布局 super 非常有用——我不知道如何在不使用像这样的 Frame
对象的情况下创建复杂布局 ...
关于python - 什么是比 .grid() 更好的 Tkinter 几何管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14846063/