2011-04-22 16 views
8

देता है मैं अपने वर्तमान जीयूआई में एक कस्टम संवाद बॉक्स जोड़ने का प्रयास कर रहा हूं जिसे उपयोगकर्ता के लिए कुछ पैरामीटर सेट करने के लिए लॉन्च किया जा सकता है। आदर्श रूप से, मैं QtDesigner का उपयोग कर कस्टम संवाद बनाना चाहता हूं। डायलॉग बॉक्स के लिए QtDesigner UI कोड से pyuic4 द्वारा उत्पन्न कोड नीचे दिया गया है।PyQt4: एक कस्टम संवाद बनाएं जो पैरामीटर

from PyQt4 import QtCore, QtGui 

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(508, 300) 
     self.buttonBox = QtGui.QDialogButtonBox(Dialog) 
     self.buttonBox.setGeometry(QtCore.QRect(150, 250, 341, 32)) 
     self.buttonBox.setOrientation(QtCore.Qt.Horizontal) 
     self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) 
     self.buttonBox.setObjectName("buttonBox") 
     self.label = QtGui.QLabel(Dialog) 
     self.label.setGeometry(QtCore.QRect(10, 120, 181, 31)) 
     font = QtGui.QFont() 
     font.setPointSize(16) 
     self.label.setFont(font) 
     self.label.setObjectName("label") 
     self.sl_value = QtGui.QSlider(Dialog) 
     self.sl_value.setGeometry(QtCore.QRect(220, 120, 161, 31)) 
     self.sl_value.setOrientation(QtCore.Qt.Horizontal) 
     self.sl_value.setObjectName("sl_value") 
     self.ed_value = QtGui.QLineEdit(Dialog) 
     self.ed_value.setGeometry(QtCore.QRect(400, 120, 41, 31)) 
     font = QtGui.QFont() 
     font.setPointSize(16) 
     self.ed_value.setFont(font) 
     self.ed_value.setObjectName("ed_value") 
     self.retranslateUi(Dialog) 
     QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), Dialog.accept) 
     QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), Dialog.reject) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 


    def retranslateUi(self, Dialog): 
     Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8)) 
     self.label.setText(QtGui.QApplication.translate("Dialog", "Set example value:", None, QtGui.QApplication.UnicodeUTF8)) 

यह तब Sub2.py में सहेजा जाता है, अपने मुख्य अजगर फ़ाइल में, मैं जोड़ने के

from Sub2 import Ui_Dialog 

मैं

class StartSub2(QtGui.QDialog): 
    def __init__(self,parent=None): 
     QtGui.QDialog.__init__(self,parent) 
     self.ui = Ui_Dialog 
     self.ui.setupUi(self) 

फिर अंत में निम्न कोड के साथ StartSub2 नामक एक नया वर्ग बनाने मेरे मुख्य जीयूआई के अंदर निम्नलिखित कोड के साथ एक फ़ंक्शन है जो संवाद

लॉन्च करना चाहिए
def exampleSubGui(self): 
    dialog = StartSub2(self) 
    result = dialog.exec_() 

कृपया ध्यान दें कि संवाद नहीं किया गया है। एक बार जब मैं इसे लॉन्च करने का संकल्प करता हूं तो मैं स्लाइडर के लिए सिग्नल/स्लॉट कनेक्शन जोड़ूंगा और बॉक्स संपादित करूँगा। साथ ही, अगर मैं इसे सही ढंग से समझता हूं, तो मुझे उपयोगकर्ता के इनपुट को वापस करने के लिए accept() विधि अधिभारित करने की आवश्यकता है।

पहली समस्या जो मैं चलाता हूं StartSub2 की विधि के साथ है। मैं निम्नलिखित त्रुटि मिलती है:

TypeError: unbound method setupUi() must be called with Ui_Dialog instance as 
first argument (got StartSub2 instance instead) 

मैं एक ही दृष्टिकोण है कि मुख्य जीयूआई ले जा रहा है जो निम्नलिखित कोड

class StartQT4(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 

का उपयोग करता है लेने की कोशिश कर रहा हूँ लेकिन इस बारे में setupUi() एक StartQT4 हो रही शिकायत नहीं है Ui_MainWindow उदाहरण के बजाय उदाहरण। क्या कोई ऐसा करने का सही तरीका बता सकता है जिसे मैं करने की कोशिश कर रहा हूं? या क्या कोई मुझे एक स्पष्ट उदाहरण या संदर्भ के लिए इंगित कर सकता है? अगर आपको अधिक जानकारी या स्पष्टीकरण की आवश्यकता है तो कृपया मुझे बताएं।

उत्तर

17
class StartSub2(QtGui.QDialog, Ui_Dialog): 
    def __init__(self,parent=None): 
     QtGui.QDialog.__init__(self,parent) 
     self.setupUi(self) 

प्रारंभ करने के लिए संवाद प्राप्त करने की आपकी पहली समस्या को हल करना चाहिए।

वापस मैं आमतौर पर एक विधि StartSub2 करने के लिए getValues की तरह कुछ कहा जाता है, को जोड़ने की जानकारी प्राप्त करने के लिए अर्थात

def getValues(self): 
    return somethingUseful 

तो

dlg = StartSub2() 
if dlg.exec_(): 
    values = dlg.getValues() 
    # Do stuff with values 
+0

आपको बहुत बहुत धन्यवाद करते हैं। यही वह है जिसकी तलाश में मैं हूं। – Thomas

+0

यह ध्यान देने योग्य मूल्य काम नहीं करेगा यदि आप self.close() संवाद (जैसे .exec() से वापस मान 0 है), तो आपको self.accept() होना होगा। प्रश्न में पुराने स्कूल सिग्नल सिंटैक्स से पहले यह पूरी तरह से मुझे स्पष्ट नहीं था। – Taran

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