tkinter python最大化窗口

dba5bblo  于 2023-05-19  发布在  Python
关注(0)|答案(9)|浏览(182)

我想将窗口初始化为最大化,但我不知道如何操作。我在Windows 7上使用Python 3.3和Tkinter 8.6。我想答案就在这里:http://www.tcl.tk/man/tcl/TkCmd/wm.htm#m8,但我不知道如何将其输入到我的Python脚本中
此外,我需要得到窗口的宽度和高度(最大化后,如果用户重新缩放它),但我想我可以自己找到。

wlzqhblo

wlzqhblo1#

你可以通过打电话

root.state('zoomed')
yuvru6vn

yuvru6vn2#

如果你想将fullscreen属性设置为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)
iklwldmw

iklwldmw3#

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

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

u0sqgete4#

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

import Tkinter

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

MyRoot.mainloop()

这解决了我的问题。

knpiaxh1

knpiaxh15#

第一种方法是使用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和手动设置几何图形(在某些平台上可能导致非托管窗口,只能通过自己的界面关闭或杀死进程,不会显示在任务栏上等)要好得多。

31moq8wy

31moq8wy6#

最有意思的是“root.wm_state('zoomed'),正如@J.F.塞巴斯蒂安提到的

bvjveswy

bvjveswy7#

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

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()
23c0lvtd

23c0lvtd8#

正如tcl/tk的官方文档所述,wm_attributes('-zoomed', True)
请求将窗口最大化。这与在Windows和Mac OS X上缩放的wm状态相同。
这意味着wm_state('zoomed')在Mac和Windows上工作,而您需要在X11**上使用wm_attributes('-zoomed', True)**来最大化窗口。

tquggr8v

tquggr8v9#

使用TkAgg作为后端,这是唯一一个在没有全屏的情况下最大化窗口的组合:

win_manager = plt.get_current_fig_manager()
win_manager.window.state('zoomed')
win_manager.full_screen_toggle()

相关问题