QMainWindow क्लास चर का उपयोग - Pyside/PyQt

मैं पायथन में एक जीयूआई एप्लीकेशन लिख रहा हूं, जो एकाधिक .py स्क्रिप्ट का उपयोग करता है। मेरे पास QMainWindow में एक चर है, जिसे मुझे अन्य वर्गों में संदर्भ/एक्सेस करने की आवश्यकता है। मुझे Ui_MainWindow.py मॉड्यूल में विभिन्न .py मॉड्यूल आयात करने में कोई समस्या नहीं है, लेकिन मैं QMainWindow क्लास चर का उपयोग नहीं कर सकता।

यह एक त्वरित छद्म कोड है जो मैं कोशिश कर रहा हूं:

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)
        self.setupUi(self)

        self.lineEditScanBarcode.returnPressed.connect(self.LoginAttempt)

    def LoginAttempt(self):
        self.user_barcode = self.lineEditScanBarcode.text()

पढ़ने वाले पाठ से मैंने कक्षा चर के संदर्भ में किया है, मैं निष्कर्ष पर आया हूं कि उपर्युक्त सेटअप के साथ, मैं अन्य वर्गों में 'user_barcode' चर को संदर्भित करने में सक्षम होना चाहिए:

class Receipt(QWidget, Ui_Receipt):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)
        self.setupUi(self)

        print(MainWindow.user_barcode)

मैं यह जांचने के लिए 'प्रिंट' कमांड का उपयोग कर रहा हूं कि यह काम कर रहा है, लेकिन मुझे निम्न त्रुटि मिलती है:

Attribute Error: type object 'MainWindow' has no attribute 'user_barcode'

क्या कोई भी उस त्रुटि को देख सकता है जिसे मैं स्पष्ट रूप से बना रहा हूं? मैंने इसी तरह के प्रश्नों के लिए एसओ खोजा है, लेकिन कुछ भी प्रासंगिक नहीं मिला है।

धन्यवाद!

संपादित करें:

यहां app.exec_() सेटअप है, मुझे यकीन नहीं है कि क्या मैं सही ढंग से माता-पिता को पास कर रहा हूं।

if __name__ == '__main__':
    app = QApplication(sys.argv)
    showMainWindow = MainWindow()
    showReceipt = Receipt(MainWindow)
    showMainWindow.show()
    app.exec_()

मैंने विभिन्न संयोजनों का प्रयास किया है, लेकिन मुझे या तो init त्रुटि, या उठाए गए टाइपरर प्राप्त हो रहा है।

0

1 उत्तर

उदाहरण कोड काम नहीं करता है, क्योंकि मेनविंडो एक वर्ग है, जबकि user_barcode उस वर्ग के instance की विशेषता है।

User_barcode विशेषता तक पहुंचने के लिए रसीद के लिए, किसी भी तरह से मेनविंडो इंस्टेंस को इसके लिए उपलब्ध कराया जाना चाहिए। और ऐसा करने का एक तरीका, रसीद के माता-पिता के रूप में मेनविंडो सेट करना है।

इसके बाद रसीद को पैरेंट विधि तक पहुंचने की अनुमति मिल जाएगी मेनविंडो इंस्टेंस और इसके गुण। निस्संदेह, इसका मतलब है कि एक रसीद हमेशा एक मुख्यविंडो होना चाहिए क्योंकि यह माता-पिता है, इसलिए इसके कन्स्ट्रक्टर को शायद इस तरह दिखना चाहिए:

class Receipt(QWidget, Ui_Receipt):
    def __init__(self, parent):
        if not isinstance(parent, MainWindow):
            raise TypeError('parent must be a MainWindow')
        super(Receipt, self).__init__(parent)
        self.setupUi(self)
        ...
        print(self.parent().user_barcode)
0
जोड़ा
उस ekhumoro के लिए धन्यवाद, जो वास्तव में और अधिक समझ में आता है। मैंने ऊपर दिए गए पोस्ट को शामिल करने के लिए मेरे कोड में संशोधन किया है, और अब मुझे मिल रहा है: TypeError: init() अनुपलब्ध 1 आवश्यक स्थितित्मक तर्क: 'पैरेंट'। यह तब होता है जब मैं पहली बार रसीद मॉड्यूल को संदर्भित करता हूं यदि name == ' main ': घोषणा और app.exec_() सेटअप। कोई विचार?
जोड़ा लेखक jars121, स्रोत
जैसा कि आप सुझाव देते हैं, मैंने माता-पिता को पारित करने का प्रयास किया है (ऊपर संपादन देखें), लेकिन अब यह उठाए गए टाइप एरर को लौटाता है। आपकी मदद के लिए फिर से धन्यवाद, यह बहुत सराहना की है!
जोड़ा लेखक jars121, स्रोत
खैर, यह आपको बता रहा है कि आपको 'माता-पिता' में प्रवेश करने की आवश्यकता है: यानी विंडो = मेनविंडो (); रसीद = रसीद (खिड़की)
जोड़ा लेखक ekhumoro, स्रोत
जैसा कि मैंने अपने उत्तर में समझाया है, आपको कक्षा में नहीं, instance में प्रवेश करना होगा, यानी showReceipt = रसीद (showMainWindow)
जोड़ा लेखक ekhumoro, स्रोत