มีสองหลักความแตกต่าง:
- ในแง่ของการโหลด,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;
นั่นมันไม่ใช่ปัญหาใหญ่แต่มันเป็นสิ่งสำคัญที่จะรู้เรื่องพวกเขาอยู่ดี