2012-01-05 11 views
8

में परिभाषित सिग्नल/स्लॉट को कैसे कार्यान्वित करें मैं अपने बटन पर क्लिक() सिग्नल को अपने स्वयं के फ़ंक्शन से कनेक्ट करने का प्रयास कर रहा हूं। बटन एक विजेट में है जिसे मैंने क्यूटी डिजाइनर के साथ बनाया है। मैं तो जैसे QUiLoader साथ .ui फ़ाइल लोड:क्यूटी डिजाइनर

class MyWidget(QtGui.QMainWindow): 
    def __init__(self, *args): 
     QtGui.QMainWindow.__init__(self, *args) 

     loader = QtUiTools.QUiLoader() 
     file = QtCore.QFile("pyside_ui_qtdesigner_form_test.ui") 
     file.open(QtCore.QFile.ReadOnly) 
     self.myWidget = loader.load(file, self) 
     file.close() 

     self.setCentralWidget(self.myWidget) 

     btn = self.myWidget.findChild(QtGui.QPushButton, "HelloWorldButton") 
     btn.clicked.connect(self.slot1)   

    def slot1(self): 
     print "Received" 

इस बटन से कनेक्ट करने के लिए क्लिक() संकेत सही तरीका है? मैं देखता हूं कि मैं सीधे क्यूटी डिजाइनर में सिग्नल और स्लॉट को तार सकता हूं, लेकिन मैं कोड में ऐसे वायर-अप कैसे तैयार करूं और प्राप्त करूं? साइड प्रश्न: उपरोक्त कोड काम करता है, लेकिन मुख्य विंडो गलत आकार में दिखाती है। मैं कैसे सुनिश्चित करूं कि यह सही आकार के साथ दिखाई देता है? क्या मुझे न्यूनतम ऊंचाई/चौड़ाई की बाधाओं के साथ ऐसा करना चाहिए?

उत्तर

12

पूर्वनिर्धारित क्यूटी संकेतों को पूर्वनिर्धारित क्यूटी स्लॉट से कनेक्ट करने के लिए Signals and Slots Editing Mode का उपयोग करें।

तो एक सरल संवाद पर "बंद करें" बटन के लिए, तो आप सिर्फ संवाद करने के लिए बटन से एक कनेक्शन खींच सकते हैं, clicked() संकेत और reject() स्लॉट का चयन करें, "ठीक है" पर क्लिक करें और अधिक कुछ भी नहीं करना होगा ।

सिग्नल और/या स्लॉट्स के लिए जिन्हें आप स्वयं परिभाषित करना चाहते हैं, आपको पहले डिजाइनर में कुछ भी "तैयार" करने की आवश्यकता नहीं है। सब कुछ अपने कोड में किया जाना चाहिए।

आपका उदाहरण पहले से ही काफी अच्छी तरह से इस दर्शाता है, लेकिन कनेक्शन भी बहुत कुछ बस किया जा सकता है और सफाई से, इस तरह:

self.myWidget.HelloWorldButton.clicked.connect(self.slot1) 

अपने मुख्य "गलत आकार" होने खिड़की का सवाल है: यह बताना मुश्किल है आपके द्वारा दिखाए गए कोड से, लेकिन ऐसा इसलिए हो सकता है क्योंकि आपने लोड किए गए विजेट में कोई लेआउट सेट नहीं किया है।

बीटीडब्ल्यू: क्या QUiLoader का उपयोग कर रहे एक विशिष्ट कारण है? pyuic4 का उपयोग कर पाइथन मॉड्यूल संकलित करना अधिक लचीला है, और आप जेनरेट किए गए कोड से बहुत कुछ सीख सकते हैं।

संपादित

मेरे लिए, मुख्य रूप पर एक लेआउट की स्थापना का आकार बदलने समस्या के बारे में आप बात कर रहे हैं ठीक करता है।

यदि आपको नहीं पता कि यह कैसे करें: डिज़ाइनर में, मुख्य रूप के रिक्त भाग पर राइट-क्लिक करें, और फिर मेनू से Layout/Layout in a Grid चुनें (इसके लिए टूलबार पर एक बटन भी है)।

एक बार ऐसा करने के बाद, फ़ॉर्म का आकार बदलना स्वचालित रूप से निहित विजेट को फिट करने के लिए फैलाएगा।

+0

धन्यवाद अच्छी तरह से काम करता है! क्यूटी डिजाइनर में न्यूनतम आकार निर्धारित करने में पुनः आकार के मुद्दों में मदद मिली। मैंने सोचा कि शायद मुख्य खिड़की का आकार सुनिश्चित करने के लिए एक प्रोग्रामेटिक तरीका है ताकि उसके अंदर के सभी विजेट दिखाई दे सकें। – Sven

+0

पुन: QuiLoader, कोई विशिष्ट कारण नहीं है, इसके अलावा यह आसान है। 'Pyuic4' दृष्टिकोण के लिए, मुझे शोध करना होगा कि eclipse/PyDev को स्वचालित रूप से .ui फ़ाइलों के लिए 'pyuic4'' कैसे शुरू करें। – Sven

+0

@ सेवन। आकार बदलने पर मेरा अद्यतन उत्तर देखें: मुझे पूरा यकीन है कि यह एक लेआउट समस्या है। – ekhumoro

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

  • कोई संबंधित समस्या नहीं^_^