Więc jeśli przejdę do QtDesigner i zbuduję interfejs użytkownika, zostanie on zapisany jako plik .ui. Jak mogę to zrobić jako plik Pythona lub użyć tego w Pythonie?
Więc jeśli przejdę do QtDesigner i zbuduję interfejs użytkownika, zostanie on zapisany jako plik .ui. Jak mogę to zrobić jako plik Pythona lub użyć tego w Pythonie?
Odpowiedzi:
Innym sposobem użycia .ui w kodzie jest:
from PyQt4 import QtCore, QtGui, uic
class MyWidget(QtGui.QWidget)
...
#somewhere in constructor:
uic.loadUi('MyWidget.ui', self)
oba podejścia są dobre. Nie zapominaj, że jeśli używasz plików zasobów Qt (niezwykle przydatnych) dla ikon i tak dalej, musisz je również skompilować:
pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc
Zauważ, że podczas uic
kompilacji interfejsu dodaje „import images_rc” na końcu pliku .py, więc musisz wkompilować zasoby do pliku o tej nazwie lub zmienić jego nazwę w wygenerowanym kodzie.
Łącząc odpowiedź Maxa i post na liście mailingowej Shriramany Sharmy , stworzyłem mały działający przykład ładowania mywindow.ui
pliku zawierającego QMainWindow
(więc po prostu wybierz opcję stworzenia głównego okna w File-New
oknie dialogowym Qt Designera ).
Oto kod, który go ładuje:
import sys
from PyQt4 import QtGui, uic
class MyWindow(QtGui.QMainWindow):
def __init__(self):
super(MyWindow, self).__init__()
uic.loadUi('mywindow.ui', self)
self.show()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
window = MyWindow()
sys.exit(app.exec_())
Uważam, że ten artykuł jest bardzo pomocny.
http://talk.maemo.org/archive/index.php/t-43663.html
Krótko opiszę działania, aby utworzyć i zmienić plik .ui na plik .py, zaczerpnięte z tego artykułu.
Plik jest tworzony i zapisywany, teraz wygenerujemy z niego kod Pythona za pomocą pyuic!
Mam nadzieję, że to komuś pomoże.
Możesz również użyć uic
w PyQt5 z następującym kodem.
from PyQt5 import uic, QtWidgets
import sys
class Ui(QtWidgets.QDialog):
def __init__(self):
super(Ui, self).__init__()
uic.loadUi('SomeUi.ui', self)
self.show()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Ui()
sys.exit(app.exec_())
Moim zdaniem czystszym sposobem jest najpierw eksport do .py, jak wspomniano powyżej:
pyuic4 foo.ui > foo.py
A następnie użyj go w swoim kodzie (np. main.py
), Na przykład:
from foo import Ui_MyWindow
class MyWindow(QtGui.QDialog):
def __init__(self):
super(MyWindow, self).__init__()
self.ui = Ui_MyWindow()
self.ui.setupUi(self)
# go on setting up your handlers like:
# self.ui.okButton.clicked.connect(function_name)
# etc...
def main():
app = QtGui.QApplication(sys.argv)
w = MyWindow()
w.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
W ten sposób daje możliwość innym osobom, które nie używają qt-designer do czytania kodu, a także zachowuje kod funkcjonalności na zewnątrz, foo.py
który mógłby zostać nadpisany przez projektanta. Po prostu odwołujesz się ui
do MyWindow
klasy, jak widać powyżej.
self.ui.okButton.clicked.connect(self.function_name)
daje mi TypeError: event() takes 1 positional argument but 2 were given
. Jak to rozwiązałeś?
Możesz przekonwertować pliki .ui na wykonywalny plik Pythona za pomocą poniższego polecenia.
pyuic4 -x form1.ui > form1.py
Teraz możesz od razu uruchomić plik Pythona jako
python3(whatever version) form1.py
Możesz zaimportować ten plik i możesz go używać.
w pyqt5 do konwersji z pliku ui do pliku .py
pyuic5.exe youruifile.ui -o outputpyfile.py -x
Korzystanie z Anaconda3 (wrzesień 2018) i projektanta QT 5.9.5. W projektancie QT zapisz plik jako ui. Otwórz monit Anaconda. Wyszukaj swój plik: cd C: .... (skopiuj / wklej ścieżkę dostępu do pliku). Następnie napisz: pyuic5 -x helloworld.ui -o helloworld.py (helloworld = nazwa twojego pliku). Wchodzić. Uruchom Spyder. Otwórz plik .py.
( Listopad 2020 ) To zadziałało dla mnie ( UBUNTU 20.04 ):
pyuic5 /home/someuser/Documents/untitled.ui > /home/someuser/Documents/untitled.py