Pyqt vs pyside UIC -Lader UnterschiedPython

Python-Programme
Anonymous
 Pyqt vs pyside UIC -Lader Unterschied

Post by Anonymous »

Ich migriere einen Code von Ptqy5 nach pyside6. Ich habe einen signifikanten Verhaltensunterschied beim Laden von .ui -Dateien.

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()
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

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()
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>

Code: Select all

self.__dict__.update(self.ui.__dict__)
Ist dies eine schlechte Idee/eine Problemumgehung?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post