【问题标题】:Python Tkinter Notebook positioning widgets using ".place"Python Tkinter Notebook 使用“.place”定位小部件
【发布时间】:2021-10-01 11:57:07
【问题描述】:

我无法弄清楚为什么使用“.place”时小部件不可见。它在使用“.pack”时起作用。我的 GUI 需要精确定位小部件,因此我需要使用“.place”。我做错了什么吗?

环境:Python:3.9.6 Windows 10 (21H1)

import tkinter as objTK
from tkinter import ttk as objTTK

root = objTK.Tk()
root.title("Tab Widget")
tabControl = objTTK.Notebook(root)
  
objSummaryTab = objTTK.Frame(tabControl)
objSettingsTab = objTTK.Frame(tabControl)
  
tabControl.add(objSummaryTab, text ='Summary')
tabControl.add(objSettingsTab, text ='Settings')
  
lb1 = objTTK.Label(objSummaryTab, text ="Summary")
lb1.place(x=5, y=5)  
          
lb2 = objTTK.Label(objSettingsTab, text ="Settings")
lb2.place(x=5, y=5) 

tabControl.place(x=5, y=5)

root.bind("<Escape>", lambda _: root.destroy())

root.geometry("500x500")

root.mainloop()

【问题讨论】:

  • “我的 GUI 需要精确定位小部件” - 为什么?非常非常少的 UI 有这样的限制。
  • 我的 GUI 包含紧凑的小部件。即使是轻微的错位看起来也很尴尬。我尝试过 .pack 和 .grid 一次,但并不满意。因此,我坚持使用 .place。也许我已经使用 python 几个月了,所以我还没有对它们进行太多探索。
  • @SandeepSD:如果您正确使用.pack().grid(),它们应该进行调整以使小部件相互配合;也就是说,没有重叠。您可以使用tkinter.PanedWindow 使窗口的各个部分可调整大小,这样如果小部件的某些部分(如长标签)不在视野范围内,仍然可以访问它们。

标签: python-3.x tkinter


【解决方案1】:

这个错误是因为place() 不会像pack()grid() 那样自动调整小部件的大小。例如,您需要为tabControl 指定widthheight 参数:tabControl = objTTK.Notebook(root, width=100, height=100)。在这种情况下,widthheight 以像素为单位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-03
    • 2021-08-14
    • 2022-06-11
    • 1970-01-01
    相关资源
    最近更新 更多