tkinter python 最大化窗口

问题描述 投票:0回答:10

我想将窗口初始化为最大化,但我不知道该怎么做。我在 Windows 7 上使用 python 3.3 和 Tkinter 8.6。我想答案就在这里:http://www.tcl.tk/man/tcl/TkCmd/wm.htm#m8 但我不知道如何将它输入到我的 python 脚本中

此外,我需要获取窗口的宽度和高度(最大化以及用户之后重新缩放窗口的宽度和高度),但我想我可以自己找出来。

python-3.x tkinter
10个回答
124
投票

您可以致电

root.state('zoomed')

63
投票

如果你想将全屏属性设置为True,很简单:

root = Tk()
root.attributes('-fullscreen', True)

但是,它不显示标题栏。如果你想保持它可见,你可以使用

geometry()
方法调整 Tk 元素的大小:

root = Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry("%dx%d+0+0" % (w, h))

使用

winfo_width()
winfo_height()
您可以获取窗口的宽度和高度,还可以将事件处理程序绑定到
<Configure>
事件:

def resize(event):
    print("New size is: {}x{}".format(event.width, event.height))

root.bind("<Configure>", resize)

46
投票

要显示带有标题栏的最大化窗口,请使用“缩放”属性

root = Tk()
root.attributes('-zoomed', True)

15
投票

我在其他网站上找到了这个:

import Tkinter

MyRoot = Tkinter.Tk()
MyRoot.state("zoomed")

MyRoot.mainloop()

这解决了我的问题。


12
投票

第一种方法是使用

root.state('zoomed')
,但不应该普遍可用。它可以在 Windows 和我的 Ubuntu 机器上运行。然而,在我的 Arch 机器下却没有。


第二种是先获取maxsize,然后手动设置几何形状,如:

m = root.maxsize()
root.geometry('{}x{}+0+0'.format(*m))

这适用于大多数机器,但不适用于所有机器。例如,在我的 Arch 下,

maxsize()
返回
(1425, 870)
,而最大化窗口的真实几何形状应该是
(1440, 848)
。所以,你也不能依赖它。


第三,我认为最好的方法是使用

root.wm_attributes('-zoomed', 1)
。它是普遍可用的并且似乎是最安全的。在某些机器上只能按宽度或高度进行缩放,但与以前的方法相比,这个方法永远不会为您提供部分位于屏幕之外的窗口。 最后,如果您想要全屏,而不仅仅是缩放窗口,请使用

root.wm_attributes('-fullscreen', 1)

。它提供了到窗口管理器行为的本机链接,因此比使用

overrideredirect
和手动设置几何图形更好地工作(这在某些平台上可能会导致非托管窗口,只能通过其自己的界面关闭或终止进程) ,不会显示在任务栏等...)
    


3
投票
root.wm_state('zoomed')

,正如@J.F.Sebastian

所提到的
    


1
投票
tcl/tk

的官方文档所述wm_attributes('-zoomed', True)


请求窗口最大化。这与wm相同 Windows 和 Mac OS X 上的状态已放大。

这意味着
wm_state('zoomed')

可以在Mac和Windows

上使用,而您需要在X11
上使用wm_attributes('-zoomed', True)
来最大化窗口。

我最近遇到了一个类似的问题,我支持的库也需要添加 Windows 10 作为开发目标。感谢我在这里找到的信息,这就是我们现在正在做的:

0
投票
class INI_Link: """A connector class between a value stored in an ini file, and a value stored elsewhere that can be get and set with two helper functions.""" def __init__(self, getter, setter, varname, inigroup="Settings", inifile=''): """Remember that getter is called first to provide the default value. Then the ini value is read if available, if not the default value is used.""" self._get = getter self._set = setter self._save = lambda value :inidb(inifile)[inigroup].__setitem__(varname, getter()) self._load = lambda :inidb(inifile)[inigroup].get(varname, getter()) #first load self._lastvalue = self._load() print(self._lastvalue) self._set(self._lastvalue) self._callbacks=[] def trace(self, callback, mode='w'): """this only traces for .value.set() not for changes to the underlying value in either location. if you never touch this again until .commit() at the end of your program, then it will never trigger until then. call .probe() to force to check for changes without returning anything.""" self.callbacks.append(callback) def probe(self): """check for changes, if there have been any, allert all traces.""" self._monitor(self._get()) def __get__(self): value = self._get() self._monitor(value) return value def __set__(self, value): self._set(value) self._save(value) self._monitor(value) def _monitor(value): "helper to dispatch callbacks" if value != self._lastvalue: self._lastvalue = value for cb in self._callbacks: try: cb() except: pass def commit(self): """Call this right before getter is no longer useful.""" self._save(self._get())

然后在主窗口类的
__init__()

    self._geometry = INI_Link(self.tkroot.geometry, self.tkroot.geometry, "window_geometry")
        try:
            #umbuntu and others, not arch
            self._zoomed = INI_Link(lambda:self.tkroot.wm_attributes('-zoomed'),
                                    lambda z: self.tkroot.wm_attributes('-zoomed', z)
                                    , "window_zoomed")
        except:
            #windows and others, not umbuntu
            self._zoomed = INI_Link(lambda: self.tkroot.state() == 'zoomed',
                                    lambda z: self.tkroot.state(['normal','zoomed'][z])
                                    , "window_zoomed")

然后当窗口关闭时:
            #save zoomed state.
            self._zoomed.commit()
            try:
                if self.tkroot.wm_attributes('-zoomed'):
                    self.tkroot.wm_attributes('-zoomed', False)
                    self.tkroot.update()
            except:
                if self.tkroot.state() != 'normal':
                    self.tkroot.state('normal')
                    self.tkroot.update()
            #save window size in normal state
            self._geometry.commit()

在Windows 10/11上,您可以使用pyautogui:

0
投票
import pyautogui [...] root.update() root.lift() root.attributes('-topmost', True) root.after_idle(self.attributes, '-topmost', False) pyautogui.hotkey('winleft', 'up')

以 TkAgg 作为后端,这是唯一可以在不全屏的情况下最大化窗口的组合:

-1
投票
win_manager = plt.get_current_fig_manager() win_manager.window.state('zoomed') win_manager.full_screen_toggle()


© www.soinside.com 2019 - 2024. All rights reserved.