2015-12-05 16 views
8

Tôi đang chạy Python v2.7 và matplotlib v1.5.0 trên Mac OS X Yosemite. Cho đến gần đây, tôi đã có thể chạy kịch bản của mình trong trình thông dịch tương tác, hiển thị một âm mưu và sau đó giết cửa sổ theo cách thủ công. Ví dụ:Không thể đóng cửa sổ âm mưu matplotlib theo cách thủ công

import numpy as np 
x = np.arange(1,10) 
y = np.arange(1,10) 
plt.plot(x,y) 
plt.show() 

Điều này được sử dụng để hoạt động tốt. Cửa sổ sẽ đóng lại và tôi quay trở lại dấu nhắc. Tuy nhiên, bây giờ khi tôi nhấn X màu đỏ để đóng cửa sổ, cửa sổ vẫn mở. Dấu nhắc lệnh của tôi trả về và hoạt động tốt, nhưng cửa sổ bị kẹt và tôi thấy quả bóng bãi biển quay tròn trên đó.

enter image description here

(Lưu ý rằng con trỏ không xuất hiện trong hình ảnh, nhưng bạn sẽ nhìn thấy dấu X màu đỏ là màu xám ra vì tôi đã đạt gần nhưng nó bị mắc kẹt mở). Nó không phải cho đến khi tôi chạy kịch bản lần thứ hai mà cửa sổ đầu tiên đóng lại, nhưng sau đó tôi bị mắc kẹt với một âm mưu mở thứ hai với cùng một vấn đề. Tôi hơi bối rối vì điều này chỉ xảy ra gần đây. Cho đến giờ, cửa sổ sẽ đóng lại.

Nó không phải là một vấn đề lớn, bởi vì Python vẫn chạy và tôi vẫn có thể tạo các ô mới, nhưng tôi tò mò là tại sao cửa sổ sẽ mở ra một thanh đột ngột. Lời khuyên nào?

CẬP NHẬT

tôi giải quyết vấn đề bằng cách chuyển các backend tương tác. Hoặc Qt4Agg hoặc TkAgg là một phần phụ trợ tương tác giải quyết vấn đề. Nhưng câu hỏi vẫn là lý do tại sao các macosx và CocoaAgg backends cho thấy hành vi này.

+0

Hãy báo cáo điều này dưới dạng lỗi trong trình theo dõi vấn đề mpl. Tôi nghi ngờ những gì đang xảy ra là bạn là a) bạn không ở chế độ tương tác nên vòng lặp sự kiện GUI không chạy trong nền b) có một thứ tự của vấn đề hoạt động khi bạn đóng cửa sổ, vòng lặp sự kiện GUI bị dừng trước nó có thể kết thúc làm sạch sau khi nó tự. – tacaswell

+0

Bạn có thể cung cấp bản cập nhật của mình làm câu trả lời và sau đó bình chọn nó là đã được giải quyết không? Điều này sẽ giúp những người khác có cùng một vấn đề. – gabra

+0

Xong. Đã trả lời câu hỏi và sự cố được đăng lên trình theo dõi vấn đề mpl trên GitHub. – Nate

Trả lời

5

Tôi đã giải quyết được sự cố bằng cách chuyển phần phụ trợ tương tác. Hoặc Qt4Agg hoặc TkAgg là một phần phụ trợ tương tác giải quyết vấn đề.

+1

Ok, những người đang tìm cách thực hiện việc này hãy kiểm tra điều này: http://stackoverflow.com/questions/3285193/how-to-switch-backends-in-matplotlib-python – Rohit

8

Để có giải pháp lâu dài (tôi không muốn chuyển đổi chương trình phụ trợ mỗi lần mở ipython), bạn có thể sửa đổi matplotlibrc.

Có nhiều tệp matplotlibrc khác nhau có thể được thay đổi (tức là chỉ với một thư mục cục bộ hoặc trên toàn cầu, v.v.). Để tìm tệp cấu hình đã được tải cho phiên ipython của bạn, hãy sử dụng matplotlib.matplotlib_fname(). Đây là những gì tôi nhận:

In [1]: import matplotlib 

In [2]: matplotlib.matplotlib_fname() 
Out[2]: u'/usr/local/lib/python2.7/site-packages/matplotlib/mpl-data/matplotlibrc' 

Mở file rc và thay đổi dòng:

backend  : macosx 

đọc:

backend  : Qt4Agg 

đã làm các trick cho tôi.

Các vấn đề liên quan