2013-07-08 12 views
7

निम्नलिखित कोड (ध्यान दें यह समस्या प्रदर्शित करने के लिए एक अत्यंत सरलीकृत संस्करण है) चल रहा पर विचार करें:Tkinter/matplotlib बैकएंड संघर्ष अनंत mainloop का कारण बनता है

import matplotlib.pyplot as plot 
from tkinter import * #Tkinter if your on python 2 

def main(): 

    fig = plot.figure(figsize=(16.8, 8.0)) 

    root = Tk() 
    w = Label(root, text="Close this and it will hang!") 
    w.pack() 
    root.mainloop() 

    print('Code never reaches this point') 

if __name__ == '__main__': 
    main() 

पहले खिड़की बंद ठीक काम करेंगे, लेकिन दूसरे विंडो बंद कोड को लटकने का कारण बनता है, क्योंकि root.mainloop() एक अनंत लूप का कारण बनता है। यह समस्या fig = plot.figure(figsize=(16.8, 8.0)) पर कॉल करके होती है। क्या किसी को पता है कि matplotlib.pyplot कॉल करने के बाद सफलतापूर्वक बंद करने के लिए रूट कैसे प्राप्त करें?

+2

'pyplot' भी अपना मुख्य मेनूप शुरू करता है जो मुझे संदेह है कि आपकी समस्या है। अपनी पसंद के एक gui में mpl को एम्बेड करने के लिए http://matplotlib.org/examples/user_interfaces/ देखें – tacaswell

+0

क्या कोई पाइपलॉट मुख्यलोप बंद करने के लिए कोई तरीका है? समस्या विभिन्न मॉड्यूल में भी, pyplot कॉल के बाद सभी निम्नलिखित tkinter खिड़कियों को प्रभावित करता है। – TheoretiCAL

उत्तर

7
import matplotlib 
from tkinter import * 

def main(): 

    fig = matplotlib.figure.Figure(figsize=(16.8, 8.0)) 

    root = Tk() 
    w = Label(root, text="Close this and it will not hang!") 
    w.pack() 
    root.mainloop() 

    print('Code *does* reach this point') 

if __name__ == '__main__': 
    main() 

जब एक Tkinter खिड़की के अंदर एक matplotlib आंकड़ा embedding, matplotlib.figure.Figure बजाय plt.Figure का उपयोग करें।

+0

मेरा उत्तर अभी भी खड़ा है - विशेष रूप से 'plt.Figure' की बजाय' matplotlib.figure.Figure' का उपयोग करना। वह परिवर्तन अकेले आपका कोड काम करेगा। – unutbu

+0

कूल कि एक पंक्ति मुझे चाहिए था, क्या आप matplotlib.figure.Figure और plt.Figure के बीच बैकएंड अंतर को समझा सकते हैं क्योंकि यह मेनलोप पर लागू होता है? धन्यवाद! – TheoretiCAL

+6

'plt.figure' मेनलोप/gui ect wrangle करने के लिए एक आकृति प्रबंधक का उपयोग करता है। 'matplotlib.figure.Figure' सिर्फ एक 'चित्रा' वस्तु है और गुई को झुकाव करने में आपकी समस्या है। – tacaswell

संबंधित मुद्दे