2016-09-07 4 views
2

У меня есть сценарий, как следует, что выполняется на моем окна машиныTkinter/Matplotlib несколько активных окон на OSX

import matplotlib.pyplot as plt 
import numpy as np 
import tkinter 

class main(tkinter.Frame): #main window 
    def __init__(self, root): # initialise 
     tkinter.Frame.__init__(self) 
     self.root = root 


     tkinter.Button(self, text='New spots', command=self.newSpots).grid() 

    def newSpots(self): 
     x = np.random.rand(10) 
     y = np.random.rand(10) 
     plt.scatter(x,y) 
     plt.show() 



if __name__=='__main__': 
    root = tkinter.Tk() 

    app = main(root).grid() 
    root.mainloop() 

При работе на окнах, он открывает окно с простой кнопкой, и при нажатии на кнопку открывается matplotlib viewer с 10 точками, нанесенными в случайных положениях. Каждое последующее нажатие кнопки добавляет еще десять точек.

Выполнение этого кода на mac производит одно и то же начальное окно, и первое нажатие кнопки создает график и открывает зрителя, как ожидалось. Тем не менее, тогда становится невозможным взаимодействие с исходным окном (только элементы управления на рабочем столе), пока окно просмотра не будет закрыто. Как сделать поведение на зеркале mac на компьютере с Windows?

ответ

1

Я нашел решение этой проблемы - кажется, что matplotlib по умолчанию используется для бэкэнда TkAgg в Windows (я не уверен, является ли это общей операцией Windows или специфической для любой конкретной установки на компьютере).

Добавление следующих строк в начало сценария заставляет сервер TkAgg и ведет к тому же поведению на обеих машинах.

import matplotlib 
matplotlib.use("TkAgg") 
Смежные вопросы