matplotlib窗口布局问题

Gök*_*ver 10 python matplotlib

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

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

2-)我有两个屏幕.有趣的是,我的mpl窗口往往在我的小屏幕上打开.如何强制mpl/ipython/WX/X-windows在我的第二台和更大的显示器上打开mpl窗口?

谢谢.

lei*_*nby 6

我使用Tk库进行绘图,您可以~/.matplotlib/matplotlibrc通过编写以下方式在文件中默认设置:

backend      : TkAgg
Run Code Online (Sandbox Code Playgroud)

这允许我使用以下方法设置窗口位置和尺寸:

import matplotlib.pyplot as plot
wm = plot.get_current_fig_manager()
wm.window.wm_geometry("800x900+50+50")
Run Code Online (Sandbox Code Playgroud)

由于有人可能想要将他们的matplotlib窗口放在Mac上,我想做出快速贡献.我经常使用和不使用外部屏幕(在工作和家中)并且想要一些自动使用外部屏幕的方法(如果可用).幸运的是,Mac操作系统必须通过AppKit进行连接.

以下代码段将返回包含位置,宽度和高度的ScreenInfo对象列表:

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
Run Code Online (Sandbox Code Playgroud)


joa*_*uin 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
Run Code Online (Sandbox Code Playgroud)

对于第二个问题,我不确定(我无法测试它)但如果问题可以通过在两个监视器中扩展的屏幕中设置图形的位置来解决,那么你可以使用SetPosition(再次用于wxAgg后端) :

>>> mng.frame.SetPosition(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)