【问题标题】:Widget is placed behind window titlebar, no matter what小部件放置在窗口标题栏后面,无论如何
【发布时间】:2023-02-12 12:06:44
【问题描述】:

我一直在我的 tkinter 程序中使用一个小部件,但这个小部件的问题是它显示在 Windows 标题栏下,这是我正在使用的小部件:

class LabeledEntry(ttk.Frame):
    def __init__(self, master, text, width=120, insertion="0"):
        super().__init__(master, width=width)
        self.pack_propagate(False)

        self.label = ttk.Label(self, text=text)

        self.entry = ttk.Entry(self)

        self.label.pack(side='left')
        self.entry.pack(side='right')

显然,问题出在 pack propagate 函数上,但我需要它以便多个小部件在同一列上看起来相等。

编辑:所以,显然,问题不是它“被放在窗户后面”的事实,而是因为我不得不手动输入框架的高度,因为它不依赖于它的孩子的大小。感谢说这话的评论者。

顺便说一句,如果您想知道没有高度的情况,请看这里: https://imgur.com/a/hQCQ8eu

【问题讨论】:

  • 这样的问题可能是由于您应用于 LabeledEntry 的实例的几何管理,您没有向我们展示。 minimal reproducible example,请。
  • 你如何创建LabeledEntry的实例?因为你没有指定它的height,所以它将是零,因为你已经执行了self.pack_propagate(False)
  • 请出示完整的minimal reproducible example。我不明白你为什么认为它被放置在 widnow 标题栏后面。我什至不明白这在 tkinter 中是怎么可能的。由于您没有为框架指定高度,因此它只有一个像素高。

标签: python user-interface tkinter


【解决方案1】:

这是你想要的吗?

将此 ttk.Label(self 更改为 ttk.Label(maaster

代码:

from tkinter import ttk
import tkinter as tk

win = tk.Tk()

class LabeledEntry(ttk.Frame):
    def __init__(self, master, text, width=120, insertion="0"):
        super().__init__(master, width=width)
        self.pack_propagate(False)

        self.label = ttk.Label(master, text=text)

        self.entry = ttk.Entry(master)

        self.label.pack(side='left')
        self.entry.pack(side='right')

win.title('3squares6lines')
app =LabeledEntry(win, 'What to enter')
app.mainloop()

截屏:

【讨论】:

    猜你喜欢
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多