Pyqt vs pyside UIC -Lader Unterschied
Posted: 11 Jul 2025, 15:07
Ich migriere einen Code von Ptqy5 nach pyside6. Ich habe einen signifikanten Verhaltensunterschied beim Laden von .ui -Dateien.
Wie Sie sehen können, sind Objekte in der .ui (wie MyButton ) beide Attribute des zurückgegebenen UI -Objekt und das MyCentralWidget -Objekt sind. Bedeutet, dass sowohl self.ui.mybutton und self.mybutton arbeiten. Dies liegt daran
Aber jetzt sind die Objekte nicht an sich selbst und so self.mybutton existiert nicht.
Ist das erwartet? Oder mache ich etwas falsch? Um alle Laufzeitprobleme zu beheben, duplizieren wir die Objekte: < /p>
Ist dies eine schlechte Idee/eine Problemumgehung?
Code: Select all
import sys
import os
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QWidget, QMainWindow
from PyQt5 import uic
ui_content = '\
\
Form\
\
\
\
\
\
PushButton\
\
\
\
\
\
\
\
\
'
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = QMainWindow()
class MyCentralWidget(QWidget):
def __init__(self):
super().__init__()
import tempfile
tmp = tempfile.NamedTemporaryFile(delete=False)
tmp.write(ui_content.encode())
tmp.close()
self.ui = uic.loadUi(tmp.name,self)
self.ui.myButton.setText(self.ui.myButton.text() + " Foo")
self.myButton.setText(self.myButton.text() + " Bar")
os.remove(tmp.name)
centralWidget = MyCentralWidget()
mainWindow.setCentralWidget(centralWidget)
mainWindow.show()
app.exec()
Code: Select all
import sys
import os
from PySide6.QtWidgets import QApplication
from PySide6.QtWidgets import QWidget, QMainWindow, QVBoxLayout
from PySide6.QtUiTools import QUiLoader
from PySide6.QtCore import QFile
ui_content = '\
\
Form\
\
\
\
\
\
PushButton\
\
\
\
\
\
\
\
\
'
if __name__ == '__main__':
ui_loader = QUiLoader()
app = QApplication(sys.argv)
mainWindow = QMainWindow()
class MyCentralWidget(QWidget):
def __init__(self):
super().__init__()
import tempfile
tmp = tempfile.NamedTemporaryFile(delete=False)
tmp.write(ui_content.encode())
tmp.close()
uifile = QFile(tmp.name)
uifile.open(QFile.ReadOnly)
self.ui = ui_loader.load(uifile,self)
uifile.close()
# Needed to have self.ui be centered
self.mainLayout = QVBoxLayout(self)
self.mainLayout.addWidget(self.ui)
self.ui.myButton.setText(self.ui.myButton.text() + " Foo")
#self.myButton does not exist
#self.myButton.setText(self.myButton.text() + " Bar")
os.remove(tmp.name)
centralWidget = MyCentralWidget()
mainWindow.setCentralWidget(centralWidget)
mainWindow.show()
app.exec()
Ist das erwartet? Oder mache ich etwas falsch? Um alle Laufzeitprobleme zu beheben, duplizieren wir die Objekte: < /p>
Code: Select all
self.__dict__.update(self.ui.__dict__)