【问题标题】:resizing tkinter window for full screen将 tkinter 窗口大小调整为全屏
【发布时间】:2015-07-17 11:19:10
【问题描述】:

我知道有很多这样的帖子。但是,我认为我没有遇到过这样的问题。

我知道下面会抓取屏幕的当前宽度和高度,并将 tkinter 窗口设置为这个大小,然后如果我们希望有一个类似的画布。

import tkinter as tk
root = tk.Tk()
width = root.winfo_screenwidth()
height = root.winfo_screenheight()
root.geometry("%dx%d" % (width, height))
canvas = tk.Canvas(root, .....)
canvas.pack(fill = "both", expand = True)

但是,我注意到使用它时,总是有一部分 tkinter 窗口从屏幕底部的任务栏上被截断。我觉得这有点烦人,特别是如果您希望在底部看到标签或其他此类功能。

有没有办法解决这个问题?我知道我们可以从高度中减去一个偏移因子来解释屏幕底部可能存在的任务栏,但这会笨拙地取代 tkinter 画布。

【问题讨论】:

  • 你在哪个平台上?我猜它不是 Mac,而是 Windows 7、Windows 8、Ubuntu ……?
  • 对不起,我应该包括 windows 7 但我假设这适用于 windows 8
  • 在 Windows 上,AFAIK,Tkinter 无法直接获取此信息 - 但是,如果您将窗口状态设置为缩放而不是显式全屏,它会为您选择合适的大小.让我试着挖掘细节。
  • 或者试试这个,如果我没记错的话:root.state("zoomed")root.state("zoom")
  • 实际上效果很好。我使用了 root.state("zoom")。这比我预期的要简单得多。

标签: python canvas tkinter tkinter-canvas


【解决方案1】:

我相信没有办法真正从 Windows 上的 Tkinter 中获取任务栏信息。

但你不必这样做。如果您将主窗口的状态设置为“缩放”,Tkinter 将要求 Windows 最大化您的窗口,Windows 将负责让您适应任务栏 - 并处理您可能拥有的任何其他奇怪的装饰,并处理自动隐藏任务栏等等。

root.state('zoomed')

据我所知,Tkinter 没有记录这个值(Tkinter 书中的state 文档说只允许“正常”、“标志性”、“撤回”和“图标”)。

但是,通常情况下,如果您转向 Tcl/Tk 文档,您会发现 Tkinter 的文档是不完整的。即使在the tutorial 中,它也提到:

在大多数系统上,您可以通过图标化窗口来暂时将其从屏幕上移除。在 Tk 中,窗口是否被图标化称为窗口的状态。窗口的可能状态包括“正常”和“图标”(用于图标化窗口),以及其他几种状态:“撤回”、“图标”或“缩放”。

wm state 的 Tk reference documentation 说:

... 正常、图标、撤回、图标或(仅限 Windows 和 Mac OS X)缩放。

此外,IIRC,您可以将“zoom”用于“zoomed”(也可以将“withdraw”用于“withdrawn”,“iconified”或“iconify”用于“icon”,“iconwindow”用于“icon”),但 Tk 试图表现得不那么友好。

【讨论】:

  • 虽然root.state('zoomed') 在这里绝对是正确的答案,但实际上有一种方法可以使用win32apiGetMonitorInfo() 获取屏幕上不包括任务栏的屏幕大小,它给出了“工作屏幕的区域”。我在回复this question 时使用了它。请注意,仅减去一部分高度来补偿任务栏仍然不会产生所需的结果(使用overrideredirect 时除外),因为窗口的边框仍然在指定的大小附近。
  • @fhdrsdg:是的,这就是我说“从 Tkinter 内部”的原因。有一个完整的 MSDN 页面以正确的方式模拟最大化模式所做的相同事情而不处于最大化模式,你绝对可以从 pywin32 (或者只是 ctypes,如果你宁愿编写更丑陋的代码而不是需要额外的依赖项)。
  • 啊,对,错过了那部分。我同意仅从 Tkinter 是不可能的。您是否有指向该 MSDN 页面的链接?尽管我可能永远不会使用它,但我想读一下。
  • @fhdrsdg:没有链接;我只知道它的存在是因为多年前(2000/XP 天),我开发了一个任务栏替换应用程序,该应用程序必须使所有相同的 API 工作相同,我很高兴他们记录了所有内容。 (虽然我想这只是证明它曾经存在,而不是它存在……但我的经验是,微软在根除方面并不像某些公司咳嗽Applecough那么糟糕没有充分理由的旧文档。)
  • 没问题,谢谢。我会再搜索一些,希望它还在。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 1970-01-01
  • 2014-07-26
  • 1970-01-01
  • 2011-05-18
  • 2014-09-01
  • 2022-06-18
相关资源
最近更新 更多