के लाभ क्या है परिवर्तित करने के लिए एक ui फाइल करने के लिए अजगर कोड बनाम लोड हो रहा है यह सीधे? [नकल]

0

सवाल

वहाँ है एक लाभ के लिए:

इसे परिवर्तित करने के लिए अजगर pyside6-यूआईसी mainwindow.यूआई > ui_mainwindow.py और फिर

import sys
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtCore import QFile
from ui_mainwindow import Ui_MainWindow

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

if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = MainWindow()
    window.show()

    sys.exit(app.exec())

बनाम लोड हो रहा है यह सीधे की तरह तो: ?

ui_file = QFile("mainwindow.ui")
ui_file.open(QFile.ReadOnly)

loader = QUiLoader()
window = loader.load(ui_file)
window.show()

मुझे लगता है कि एप्लिकेशन को तेजी से शुरू/तेजी से चलाने के लिए परिवर्तित करता है, तो पहले से है. वहाँ कुछ और विचार करने के लिए?

pyqt pyside6 python qt
2021-11-22 11:50:08
1

सबसे अच्छा जवाब

0

वहाँ रहे हैं दो मुख्य मतभेद:

  • के मामले में लोड हो रहा है, QUiLoader सैद्धांतिक रूप से एक सा कहते हैं की भूमि के ऊपर है, क्योंकि यह निर्माण करने के लिए यूआई हर, जिसका अर्थ है कि यह करने के लिए पार्स एक्सएमएल फ़ाइल बनाने के लिए, नोड संरचना, और फिर बनाने के लिए यूआई के साथ अपने सभी सामग्री; यूआईसी फ़ाइल, इसके बजाय, सीधे बनाता है यूआई, लंघन पहले दो चरणों के ऊपर;
  • QUiLoader ही कर सकते हैं बनाने के लिए एक नया विजेट पर आधारित यूआई फ़ाइल है, जबकि यूआईसी विधि की अनुमति देता है का उपयोग करने के लिए एक पहले से ही मौजूदा आधार विजेट, और बच्चे विगेट्स के लिए जोड़ा जा सकता है;

उत्तरार्द्ध बिंदु शायद सबसे महत्वपूर्ण: का उपयोग कर QUiLoader आप सीधे नहीं कर सकते का उपयोग subclassing के लिए लोड यूआई ।

उदाहरण के लिए, यदि आप बनाने के लिए एक मुख्य विंडो में डिजाइनर, QUiLoader वापस आ जाएगी एक नए QMainWindow. आप नहीं कर सकते (या, कम से कम, आप नहीं होना चाहिए) क्या निम्न:

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        ui_file = QFile("mainwindow.ui")
        ui_file.open(QFile.ReadOnly)

        loader = QUiLoader()
        window = loader.load(ui_file, self)

और तुम नहीं करना चाहिए, यहां तक कि बनाने के लिए प्रयास करें लौटे वस्तु के रूप में केंद्रीय विजेट, निम्नलिखित की तरह:

        self.setCentralWidget(window)

क्योंकि परिणाम होगा करने के लिए एक QMainWindow के अंदर एक QMainWindow, जो हतोत्साहित किया जाता है और असमर्थित है, और शायद यह भी समस्या पैदा का उपयोग करते समय मानक सुविधाओं के एक QMainWindow (आमतौर पर, नाव और उपकरण पट्टियों).

केवल वैकल्पिक के लिए किया जाएगा बनाने के लिए एक बुनियादी रूप में विजेट डिजाइनर का उपयोग करें और है कि के रूप में केंद्रीय विजेट, के साथ नकारात्मक पक्ष यह है कि मेनू, नाव और टूलबार है बनाया जा करने के लिए कोड द्वारा.

के लिए PySide, केवल संभावना की अनुमति देता है कि पूरा subclassing उपयोग करने के लिए है pyside-यूआईसी विधि और फिर अंत में उपयोग के कई विरासत (लेकिन है कि एक आवश्यकता नहीं है, के रूप में रचना एक मान्य विकल्प है, वैसे भी):

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

दूसरे हाथ पर, PyQt प्रदान करता है loadUi समारोह है कि वास्तव में क्या करता है setupUi करता है, के बाद से दूसरा तर्क नहीं है, माता-पिता विजेट, लेकिन विजेट ही है, और की सामग्री यूआई लोड किया जाएगा में यह:

class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        uic.loadUi("mainwindow.ui", self)

के रूप में दूर के रूप में मैं जानते हैं, PySide प्रदान नहीं करता है इसी तरह कुछ भी अभी तक.

ध्यान दें कि लोड यूआई क्रम में दो मुद्दों वैसे भी, और दोनों के लिए बाइंडिंग:

  • वहाँ है कोई पूर्व विवेक की जाँच, अगर यूआई फ़ाइल दूषित या अमान्य या असमर्थित सुविधाएँ/गुण के कारण संस्करण बेमेल, यह नहीं हो सकता है ठीक से लोड या यहां तक कि दुर्घटना;
  • जब एक आईडीई का उपयोग कर, कोई कोड के पूरा होने के लिए यूआई वस्तुओं, के बाद से वे कर रहे हैं केवल लोड क्रम में;

उन नहीं कर रहे हैं प्रमुख मुद्दों, लेकिन यह करने के लिए महत्वपूर्ण है के बारे में पता होना उन्हें वैसे भी.

2021-11-22 14:09:05

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में