อะไรคือประโยชน์จากการเปลี่ยนแปลงเป็นส่วนติดต่อผู้ใช้ของแฟ้มที่เป็นภาษาไพธอนรหัสกับการโหลดมันโดยตรงงั้นเหรอ? [ที่ซ้ำกัน]

0

คำถาม

มีประโยชน์ที่:

การเปลี่ยนมันให้เป็นภาษาไพธอน pyside6-uic หน้าต่างหลัก.ส่วนติดต่อผู้ใช้ขอ>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 ตามทฤษฎีแล้วเพิ่มหน่อยของมุมสูงเท่านั้นเพราะมันต้องสร้างส่วนติดต่อผู้ใช้ขอ everytime หมายถึงนั่นมันต้องวิเคราะห์แฟ้ม XML,สร้างโหนดโครงสร้าง,และจากนั้นสร้างส่วนติดต่อผู้ใช้กับทั้งเนื้อหาของมัน;ค uic แฟ้มแทนที่โดยตรงสร้างสถานที่ส่วนติดต่อผู้ใช้ขอ,กำลังข้ามไปคนแรกสองขั้นตอนเหนื;
  • QUiLoader เดียวที่สามารถสร้าง ใหม่ข องวิดเจ็ตจากพื้นฐานที่ส่วนติดต่อผู้ใช้ของแฟ้มในขณะที่ uic วิธีการอนุญาตให้ใช้การแล้วที่มีอยู่ ของวิดเจ็ตและที่ลูกของวิดเจ็ตจะถูกเพิ่มเข้ากับมั;

อย่างหลังเรื่องคืออาจจะสำคัญที่สุด:ใช้ 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-uic วิธีการและจากนั้นในที่สุดใช้หลายในกองมรดกข(แต่นั่นมันไม่สำคัญที่สุอย่างที่ค์ประกอบก็คือผู้ที่ใช้งานทางเลือกยังไงก็ตา):

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 ไม่ได้ให้อะไรที่คล้ายกันเลย

โปรดสังเกตว่าการโหลดส่วนติดต่อผู้ใช้ของที่ runtime มีสองปัญหายังไงก็ตาม,และสำหรับทั้งสอง bindings:

  • ไม่มีก่อนจิตปกติตรวจถ้าส่วนติดต่อผู้ใช้ของแฟ้มเกิดความเสียหายหรือไม่ถูกต้อง,หรือยังไม่รองรับคุณสมบัติต่างๆ/คุณสมบัติเนื่องจากรุ่นของ mismatch มันอาจจะไม่โหลดเหมาะสมหรือแม้แต่ช;
  • เมื่อใช้เป็นแบบ ide ไม่มีรหัสให้สมบูรณ์สำหรับส่วนติดต่อผู้ใช้ของวัตถุ,ตั้งแต่พวกเขาเป็นเพียงโหลดตอน runtime;

นั่นมันไม่ใช่ปัญหาใหญ่แต่มันเป็นสิ่งสำคัญที่จะรู้เรื่องพวกเขาอยู่ดี

2021-11-22 14:09:05

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่