Como posso exibir uma matplotlib figura janela na parte superior de todas as outras janelas em Spyder
-
21-12-2019 - |
Pergunta
Eu estou usando o Spyder IDE e eu acho que o matplotlib figura windows aparecem sempre por trás de outras janelas.Por exemplo, imediatamente após o início Spyder, se eu digitar plt.plot([0,1],[0,1])
no console, eu recebo um terreno atrás da Spyder janela.Como posso criar nova figura de visualização do windows no topo de todas as outras janelas?
Eu encontrei esta solução (fazer o matplotlib de plotagem janela pop-up como o ativo), mas ele não funciona para mim em Spyder.Eu executar em problemas com fig.canvas.manager.window
.Ele diz AttributeError: 'FigureManagerMac' object has no attribute 'window'
.
Solução
Bem, eu estava com a solução quando eu estava trabalhando em outra coisa.
Quando eu uso o MacOSX
back-end e, em seguida, fig.canvas.manager.window
dá AttributeError: 'FigureManagerMac' object has no attribute 'window'
.No entanto, quando eu uso o TkAgg
back-end e, em seguida, fig.canvas.manager
tem o atributo window
.Assim, eu posso implementar esta sugestão como segue:
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot([0,1],[0,1])
#Put figure window on top of all other windows
fig.canvas.manager.window.attributes('-topmost', 1)
#After placing figure window on top, allow other windows to be on top of it later
fig.canvas.manager.window.attributes('-topmost', 0)
Bastante simples, certo?A primeira parte complicada é que você deve definir o back-end antes de import pyplot.Alterar o back-end depois não faz nada na minha experiência.A segunda parte complicada é Spyder Científica script de Inicialização não import matplotlib.pyplot as plt
quando você iniciar o Spyder IDE, portanto, você não tem chance de definir o back-end antes de pyplot é importado.A maneira de contornar isso é ir para as Preferências->Console->Módulos Externos, definir o GUI Backend para TkAgg, e reiniciar o Spyder.Em seguida, o código acima funciona corretamente.
Anteriormente, eu estava montando o back-end através de matplotlib.rcParams['backend'] = 'TkAgg'
logo após o lançamento Spyder.Quando eu estava fazendo outra coisa, porém, eu comecei a receber erros que mencionado o MacOSX
back-end.Isso não faz qualquer sentido para mim, pois eu pensei que eu estava usando TkAgg
.O irritante é quando eu perguntei matplotlib.get_backend
ele voltou TkAgg
!Aparentemente, a definição de back-end depois de importar pyplot age como se você tiver alterado o back-end, mas, na verdade, não altere o back-end.Argg!!