python - 什么是比 .grid() 更好的 Tkinter 几何管理器

标签 python tkinter

我的投诉

我目前比“以往任何时候”都更深入地研究 Tkinter GUI,并且我发现 .grid() 几何管理器的不足有几个原因:

  1. 图表基于其中最大的小部件 - 这种相对性会导致不准确。

  2. 在 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 个几何管理器 -- gridpackplace。第三个是最通用的,但也很难用。我更喜欢 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/

相关文章:

python - 将 pandas.dataframe.plot() 与 matplotlib.pyplot.plot() 结合的最佳方法是什么?

python-3.x - Ubuntu Mate 上的 Tkinter 段错误中的 Matplotlib

python - Tkinter 将矩形小部件下方的小部件绑定(bind)到鼠标事件

python - Tkinter 窗口事件和属性

python - tkinter 按钮没有对齐

python - 从数据帧中获取 bool 数据帧,如果在first_valid_date之后则为 true,否则为 false

python - python使用adduser --home linux

python - 构造一个查询来过滤与给定 A 实例相关的所有 B 实例的多对多

python - Pandas :如何消除值以特定字符结尾的行?

python - 用于打印到 Tkinter GUI 而不是 Eclipse Console 的脚本