Jak mogę wygenerować kod Pythona z pliku QtDesigner? Znalazłem pyside-uic, ale nie mogę znaleźć przykładu składni. Uruchamiam win7 i pythonxy z spyderem.Generowanie kodu Pythona za pomocą pyside-uic
Odpowiedz
Przeczytaj dokumentację. W tym konkretnym przypadku, http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#pyuic4:
The pyuic4 utility is a command line interface to the uic module. The command has the following syntax:
pyuic4 [options] .ui-file
The full set of command line options is:
-h, --help A help message is written to stdout.
--version The version number is written to stdout.
-i N, --indent=N
The Python code is generated using an indentation of N spaces. If N is 0 then a tab is used. The default is 4.
-o FILE, --output=FILE
The Python code generated is written to the file FILE.
-p, --preview The GUI is created dynamically and displayed. No Python code is generated.
-w, --pyqt3-wrapper
The generated Python code includes a small wrapper that allows the GUI to be used in the same way as it is used in PyQt v3.
-x, --execute The generated Python code includes a small amount of additional code that creates and displays the GUI when it is executes as a standalone application.
--from-imports Resource modules are imported using from . import rather than a simple import.
klasa QUiLoader będzie wykonać zadanie bez tworzenia pliku pośredniego.
http://www.pyside.org/docs/pyside/PySide/QtUiTools/QUiLoader.html
pyside-UIC jest mniej lub bardziej identyczne pyuic4 jako taka strona człowiek określa:
Usage:
pyside-uic [options] <ui-file>
Options:
--version
show program's version number and exit
-h,--help
show this help message and exit
-oFILE,--output=FILE
write generated code to FILE instead of stdout
-x,--execute
generate extra code to test and display the class
-d,--debug
show debug output
-iN,--ident=N
set indent width to N spaces, tab if N is 0 (default: 4)
Zwykle używam go tak:
pyside-uic -o output.py input.ui
Zwykle używam tego w ten sposób (w systemie Windows): 'pyside-uic.exe użyteczny_nazwa_pliku.ui> użyteczny_nazwa_pliku_ui.py'A Następnie mogę śledzić za pomocą tej prostej konwencji nazewnictwa. W przyszłości spodziewam się nie używać tego więcej, ale zamiast tego użyj klasy QUILoader (patrz @Sven poniżej) ... – Neon22
Wolę tworzenie kodu UI przez pyside-uic vs przy użyciu programu ładującego, ponieważ ** 1st **: z projektantem oraz kod xml, który nigdy nie jest tak naprawdę dostrzegany. Więc ciągle walczysz o to, jak dynamicznie kodować Qt samemu. ** 2nd **: kompilacja do py następnie pyc dzieje się raz, aż zmienisz ui nie za każdym razem, gdy wystrzelisz skrypt! ** Trzeci **: odkładasz dużo skomplikowania ze swojego kodu. To jest 'import' w porównaniu do wszystkich rzeczy związanych z ładowaczem! Wiem, że to już nie jest kwestia czasu, ale zawsze czuję, że dużo tracę podczas "ładowania" xml. – ewerybody
pyside-uic.exe MyWindow.ui -o MyWindow.py
jest to, co robiłem i działa dobrze (o ile wiem)
prostu starał Pyside za QUILoader, działa bez zarzutu:
from PySide import QtGui
from PySide import QtCore
from PySide import QtUiTools
class MyWidget(QtGui.QMainWindow):
def __init__(self, *args):
apply(QtGui.QMainWindow.__init__, (self,) + args)
loader = QtUiTools.QUiLoader()
file = QtCore.QFile("pyside_ui_qtdesigner_form_test.ui")
file.open(QtCore.QFile.ReadOnly)
self.myWidget = loader.load(file, self)
file.close()
self.setCentralWidget(self.myWidget)
if __name__ == '__main__':
import sys
import os
print("Running in " + os.getcwd() + " .\n")
app = QtGui.QApplication(sys.argv)
win = MyWidget()
win.show()
app.connect(app, QtCore.SIGNAL("lastWindowClosed()"),
app, QtCore.SLOT("quit()"))
app.exec_()
Użyłem Eclipse i QTDesigner utworzyć plik .ui (kliknij prawym przyciskiem myszy na module "New -> Other ..", wybierz „Qt Designer - > Formularz Qt Designer "). Nie jest potrzebne żadne bezpośrednie wywołanie.
+1 za dostarczenie dobrego, kompletnego przykładu. Z tą jedną rzeczą utknąłem jednak, że QFile kieruje się do katalogu pakietów na ścieżce pliku, a nie do katalogu, w którym znajduje się ten kod. Tylko dla kogoś, kto utknął w przyszłości. – IsaacS
Problem polega na tym, loader.load zwraca obiekt. Ale w uic, dostajemy klasę, możemy podklasować klasę zgodnie z naszą potrzebą. Ale w loader.load zawsze zwracamy instancjonowany obiekt, więc nie ma podklasy, żadnych dostosowań. Nawet nie można załadować niestandardowego widgetu: Zobacz ten błąd: https://bugreports.qt-project.org/browse/PYSIDE-77 – Sarim
Używanie QtUiTools (zgodnie z sugestią w innej odpowiedzi) jest obecnie zniechęcane przez zespół PySide.
Przeczytaj cały artykuł tutaj: https://groups.google.com/forum/?fromgroups=#!topic/pyside/_s1HPe6XTZs
import pysideuic
import xml.etree.ElementTree as xml
from cStringIO import StringIO
def loadUiType(uiFile):
"""
Pyside "loadUiType" command like PyQt4 has one, so we have to convert the
ui file to py code in-memory first and then execute it in a special frame
to retrieve the form_class.
"""
parsed = xml.parse(uiFile)
widget_class = parsed.find('widget').get('class')
form_class = parsed.find('class').text
with open(uiFile, 'r') as f:
o = StringIO()
frame = {}
pysideuic.compileUi(f, o, indent=0)
pyc = compile(o.getvalue(), '<string>', 'exec')
exec pyc in frame
# Fetch the base_class and form class based on their type
# in the xml from designer
form_class = frame['Ui_%s'%form_class]
base_class = eval('QtGui.%s'%widget_class)
return form_class, base_class
można używać w ten sposób, aby załadować UI i można również uzyskać form_class jak również klasy bazowej jako typ zwracany ... ale jeśli nie chcesz konwertować, w przeciwnym razie Tak jest poprawna metoda.
pyside-uic.exe MyWindow.ui -o MyWindow.py
skąd wziąłeś pysideuic? Ponieważ nie znajduje się w pakiecie PySide. – Romulus
Spójrz na C: \ Python27 \ Lib \ site-packages \ PySide \ scripts \ uic.py (lub gdziekolwiek masz zainstalowany python). Jeśli spojrzysz na ten skrypt, zobaczysz opcje opisane i opisane tak, jak na stronie podręcznika (Którego nie wiem, jak poprawnie wyświetlać w oknach.) Wskazówki są mile widziane.) Tutaj http://manpages.ubuntu.com/manpages/precise/man1/pyside-uic.1.html
Przez pewien czas wpadłem w zakłopotanie żeby spojrzeć na C: \ Python27 \ Lib \ site-packages \ pysideuic \ pyside-uic.1, ponieważ myślałem, że to musi być plik, który jest wywoływany. Nawet próba wyświetlenia tego jako strony podręcznika jest dla mnie niemożliwa z powodu wszystkich dodatkowych znaków. Nie możesz nauczyć się składni, próbując zgadnąć, które z nich są dodatkowe, a które nie!
W oknach można zautomatyzować to za pomocą pliku wsadowego oczywiście, zapisując plik tekstowy z wyżej wymienioną linią (poniżej w celach informacyjnych) z rozszerzeniem .bat, np. Uic_generator.bat.
pyside-UIC MyWindow.ui -o MyWindow.py
[Windows man reader strony] (https://stackoverflow.com/a/944571/984421) – ekhumoro
- 1. Generowanie kodu za pomocą Scala
- 2. Generowanie podpowiedzi typu Pythona za pomocą kodu SWIG
- 3. Generowanie wszystkich DNA kmerów za pomocą Pythona
- 4. Generowanie kodu statycznego za pomocą LLVM API
- 5. Przyspieszenie kodu Pythona za pomocą cythonu
- 6. Generowanie kodu 128 kodów kreskowych za pomocą Excela VBA
- 7. PySide, PysideUIC i wiele dziedziczenia
- 8. Generator kodu Pythona
- 9. Jak wykonać polecenie awk za pomocą kodu Pythona
- 10. Generowanie kodu HDF5 C
- 11. Generowanie płynnego wykresu liniowego za pomocą matplotlib
- 12. Generowanie metryk projektu za pomocą Doxygen?
- 13. Generowanie dokumentacji JavaScript za pomocą Doxygen
- 14. Zrozumienie kodu Pythona
- 15. Generowanie pliku PDF za pomocą Swift
- 16. Generowanie modeli 3D za pomocą skórek pierwotnych
- 17. Generowanie instrukcji przełącznika za pomocą JavaPoet
- 18. Generowanie kodu w Maven
- 19. Co to za fragment kodu Pythona?
- 20. Czytnik kodu Pythona
- 21. Przekierowanie wejścia za pomocą pythona
- 22. Skrobanie ekranu za pomocą Pythona
- 23. Parsowanie SQL za pomocą Pythona
- 24. Wykrywanie anomalii za pomocą Pythona
- 25. Narysuj teren za pomocą pythona?
- 26. Generowanie ELF za pomocą wskazówek libelf
- 27. generowanie kodu Emmet z HTML
- 28. Powtarzalne generowanie kodu obiektowego C++
- 29. Generowanie plików PDF za pomocą PHP
- 30. Generowanie pliku wykonywalnego za pomocą wix
Dzięki, PySide wydaje się działać jak PyQt – ArtDijk
D'oh! Całkowicie przegapiłem nieco PySide. Na szczęście PyQt4 zrobił wiele rzeczy, więc PySide nie musiał wiele zmieniać :) – delnan