matplotlib窗口布局问题

12 投票
2 回答
10859 浏览
提问于 2025-04-17 04:31

我有两个关于mpl窗口位置的问题(使用WXAgg后端)

1-) 如何创建一个最大化的窗口,而不是每次都要我手动点击窗口去最大化它?

2-) 我有两个屏幕。有趣的是,我的mpl窗口总是倾向于在我的小屏幕上打开。我该如何强制mpl/ipython/WX/X-windows在我的第二个更大的显示器上打开mpl窗口?

谢谢。

2 个回答

7

我使用Tk库来绘图,你可以通过在~/.matplotlib/matplotlibrc文件中写入以下内容来默认设置它:

backend      : TkAgg

这样我就可以使用以下代码来设置窗口的位置和大小:

import matplotlib.pyplot as plot
wm = plot.get_current_fig_manager()
wm.window.wm_geometry("800x900+50+50")

因为有些人可能想在Mac上调整他们的matplotlib窗口位置,所以我想快速分享一下我的经验。我经常在有外接屏幕和没有外接屏幕的情况下工作(在公司和家里),我希望能有一种方法在外接屏幕可用时自动使用它。幸运的是,Mac操作系统的大部分功能都可以通过AppKit来操作。

下面的代码片段将返回一个包含屏幕信息的列表,每个信息都有位置、宽度和高度:

from AppKit import NSScreen

class ScreenInfo:
    pass

def getScreensInfo():
    screens = []

    for i, s in enumerate(NSScreen.screens()):
        screen = ScreenInfo()
        frame = s.frame()
        screen.x = frame.origin.x
        screen.y = frame.origin.y
        screen.w = frame.size.width
        screen.h = frame.size.height
        screens.append(screen)
    return screens
5

关于你第一个问题,你可以在你的图形管理器上使用 Maximize,因为你的图形管理器是一个 FigureManagerWx 实例。如果你使用的是其他类型的后端,也可以用类似的方法。

>>> from matplotlib import pyplot as plt
>>> plt.plot([1,2,6,4])
[<matplotlib.lines.Line2D object at 0x0000000008E5D2E8>]
>>> mng = plt.get_current_fig_manager()
>>> plt.show()                                    # you get normal size
>>> mng.frame.Maximize(True)                      # now mpl window maximizes

至于第二个问题,我不太确定(我无法测试),但如果这个问题可以通过设置你的图形在两个显示器上扩展的屏幕位置来解决,那么你可以使用 SetPosition(同样是针对 wxAgg 后端)。

>>> mng.frame.SetPosition(*args, **kwargs)

撰写回答