【问题标题】:get rid of blank space around widgets in tkinter摆脱 tkinter 中小部件周围的空白空间
【发布时间】:2017-11-14 20:19:03
【问题描述】:

我将小部件放在带有.grid 的窗口上,并注意到小部件周围有空间。我用highlightthickness 在画布小部件上修复了它,但这不适用于按钮小部件。当您有灰色窗口背景并且按钮周围有空白区域时,它看起来并不酷。 附言我在 macos Sierra 上使用 python3

root = Tk()
root.configure(bg='grey')

w = Canvas(root, width=150, height=150, highlightthickness=0)
w.grid(row=1, column=1, sticky="nsew")

clear_btn = Button(text="Clear", width=15, command=lambda: w.delete("all"))
clear_btn.grid(row=2, column=1)

root.mainloop()

附: TKinter leaving borders around widgets 就是这个样子。有人建议他使用highlightbackground,但是当我截取小部件时,小部件周围仍有空白区域。

【问题讨论】:

  • 我们可以看看你的剧本吗?
  • 请显示minimal reproducible example。小部件周围的空间有多种原因。如果没有看到您的代码,我们不可能提供修复。

标签: python tkinter


【解决方案1】:

要让按钮填满它所占据的网格框的整个空间,请尝试将grid() 函数的sticky 参数设置为"NSEW"

from tkinter import *

root = Tk()
root.configure(bg = "grey")

w = Canvas(root, width = 150, height = 150, highlightthickness = 0)
w.grid(row = 1, column = 1, sticky = "NSEW")

clear_btn = Button(text = "Clear", width = 15, command = lambda: w.delete("all"))
clear_btn.grid(row = 2, column = 1, sticky  =  "NSEW")

root.mainloop()

之前:

之后:

注意:这些窗口的外观可能会在不同操作系统之间略有不同,甚至在同一操作系统上的不同视觉主题之间也会有所不同。

【讨论】:

  • 在 mac 上看起来完全不同。你的解决方案对我没有帮助。不过还是谢谢))
  • @Igor234 我很担心这个。在教授 Python 研讨会以在 tkinter 中制作基本计算器时,我注意到了同样的问题:其中一位参与者使用的是 macOS,而 tkinter 无法像在 Windows 7 或 Raspbian Linux 上那样与按钮交互。经过一番挖掘,我找到了this article,Brian Oakley 在这里回答“OSX 上的按钮确实希望看起来像 OSX 按钮,并且不会以您想要的方式扩展。这是使用本机小部件的陷阱之一。”
  • 我在我的问题中添加了更多信息。你能查一下吗?
  • @Igor234 我刚刚检查过。对于你引用的问题,你看答案了吗? Brian Oakley 回答了同样的问题,并再次指出了 OSX 及其原生小部件的问题。引用他的话,“你能做的最好的事情就是将highlightbackground 设置为与你的背景相同的颜色,以便它融入其中。”
  • @Igor234 最终,看起来您可能需要重新处理问题以使其与 OSX 本机小部件更兼容,或者使用不使用 tkinter 的 GUI 包原生小部件,除非其他更熟悉 OSX 的人提出了我不知道的新颖解决方案,这总是有可能的。
【解决方案2】:

我没有 OSX,所以我无法检查,但我认为如果您使用 ttk 和与默认样式不同的样式(如“clam”),您可能能够配置您想要的东西.

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
root.configure(bg='grey')

style = ttk.Style(root)
style.theme_use('clam')

w = tk.Canvas(root, width=150, height=150, highlightthickness=0)
w.grid(row=1, column=1, sticky="nsew")

clear_btn = ttk.Button(text="Clear", width=15, command=lambda: w.delete("all"))
clear_btn.grid(row=2, column=1)

root.mainloop()

【讨论】:

    猜你喜欢
    • 2021-08-26
    • 2016-12-21
    • 2014-08-15
    • 2014-08-17
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多