2013-02-15 10 views
16

मैंने थोड़ी देर के लिए पीईक्यूटी का उपयोग किया है, और पूरे बार मैंने इसका इस्तेमाल किया है, एक सुंदर लगातार प्रोग्रामिंग पैटर्न रहा है।आप पाईसाइड के साथ पाइथन कक्षाओं पर .ui फ़ाइलों को कैसे लोड करते हैं?

  1. एक .ui फ़ाइल बनाने के लिए क्यूटी डिजाइनर का उपयोग करें।
  2. आपके द्वारा .ui फ़ाइल में बनाए गए विजेट के समान प्रकार की एक पायथन कक्षा बनाएं।
  3. पायथन कक्षा आरंभ करते समय, कक्षा में .ui फ़ाइल को गतिशील रूप से लोड करने के लिए यूआईसी का उपयोग करें।

क्या PySide में ऐसा कुछ करने का कोई तरीका है? मैंने प्रलेखन और उदाहरणों के माध्यम से पढ़ा है और सबसे नज़दीकी चीज जो मुझे मिल सकती है वह कैलकुलेटर उदाहरण था जो कि वाईई फ़ाइल को पायथन कोड से पूर्व-प्रस्तुत करता था, जो कि पीईक्यूटी में ऐसा करने का सुपर पुराना तरीका है (इसे पायथन पर सेंकना क्यों जब आप सिर्फ यूई को पार्स कर सकते हैं?)

+0

मैं हमेशा सोचा कि यह बेहतर था आवेदन स्टार्टअप से एक पूरे पार्स कदम दूर करने के लिए, और कहा कि होने गतिशील loadUi एक विकास सुविधा के अधिक था। – jdi

+0

@jdi "बेहतर" व्यक्तिपरक है। थोड़ा तेज़ ... शायद ..., ऐसा नहीं है कि पाइथन यूई कोड को पार्स नहीं किया जाना चाहिए, आप केवल एक प्रकार के पार्सिंग को दूसरे के लिए प्रतिस्थापित कर रहे हैं। पीईटीटी के प्रमुख लाभों में से एक तेज़ पुनरावृत्त देव वर्कफ़्लो है। PySide उस पर एक और कदम जोड़ रहा है पीछे आईएमएचओ जा रहा है। –

+0

मैं आपके सुधार से सहमत हूं। मुझे इसे वाक्यांशित करना चाहिए था "मैंने व्यक्तिगत रूप से इसे और अधिक सरल पाया है"। और मुझे लगता है कि गतिशील लोडिंग में वैसे भी अधिक पार्सिंग शामिल है। आपको पहले यूआई एक्सएमएल -> पायथन कोड को पार्स और कन्वर्ट करना होगा, और उसके बाद ऑब्जेक्ट्स का निर्माण करना होगा। – jdi

उत्तर

20

मैं बिल्कुल पाइसाइड के साथ कर रहा हूं। :)

आप इस https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8 का उपयोग (सेबस्टियन विएस्नेर द्वारा मूल https://github.com/lunaryorn/snippets/blob/master/qt4/designer/pyside_dynamic.py पर था, लेकिन गायब हो गया है) - जो PySide.QtUiTools.QUiLoader ओवरराइड करता है और एक नया loadUi() विधि की आपूर्ति इतना है कि आप यह कर सकते हैं:

class MyMainWindow(QMainWindow): 
    def __init__(self, parent=None): 
     QMainWindow.__init__(self, parent) 
     loadUi('mainwindow.ui', self) 

जब आप MyMainWindow को तुरंत चालू करते हैं, तो इसमें यूआई होगा जिसे आपने क्यूटी डिजाइनर के साथ डिज़ाइन किया था।

आपको कस्टम विजेट का उपयोग करने के लिए की जरूरत है, इस जवाब को देखने के (क्यूटी डिज़ाइनर में "करने के लिए बढ़ावा देने के"): https://stackoverflow.com/a/14877624/532513

+0

हाय वहाँ। जिथूब का लिंक टूटा हुआ लगता है। –

+0

हेड-अप के लिए धन्यवाद! मैंने एक gist के रूप में pyside_dynamic.py का अपना संशोधित संस्करण उपलब्ध कराया है, संशोधित उत्तर देखें। –

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