Làm cách nào để tạo mã python từ tệp QtDesigner? Tôi tìm thấy pyside-uic nhưng tôi không thể tìm thấy một ví dụ cho cú pháp. Tôi chạy win7 và pythonxy với spyder.Tạo mã Python bằng pyside-uic
Trả lời
Đọc tài liệu. Trong trường hợp cụ thể này, 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.
Lớp QUiLoader sẽ thực hiện công việc mà không tạo tệp trung gian.
http://www.pyside.org/docs/pyside/PySide/QtUiTools/QUiLoader.html
pyside-UIC là nhiều hơn hoặc ít giống với pyuic4, như vậy man page quy định cụ thể:
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)
Tôi thường sử dụng nó như thế này:
pyside-uic -o output.py input.ui
Tôi thường sử dụng nó như thế này (trong cửa sổ): 'pyside-uic.exe useful_filename.ui> useful_filename_ui.py' Sau đó, tôi có thể theo dõi bằng cách sử dụng quy ước đặt tên đơn giản này. Trong tương lai tôi hy vọng sẽ không sử dụng điều này nữa mà thay vào đó hãy sử dụng lớp QUILoader (xem phần dưới đây) ... – Neon22
Tôi thích tạo mã UI qua pyside-uic và sử dụng bộ nạp vì ** 1 **: với trình thiết kế và mã xml bạn chưa bao giờ thực sự hiểu được nội dung thực sự được sắp xếp ra sao. Vì vậy, bạn tiếp tục đấu tranh làm thế nào để tự động mã Qt mình. ** 2 **: biên dịch thành py sau đó pyc xảy ra một lần cho đến khi bạn thay đổi ui không phải mỗi khi bạn kích hoạt tập lệnh của mình! ** 3 **: bạn giữ rất nhiều phức tạp từ mã của bạn. Đó là 'import' và tất cả các công cụ loader này! Tôi biết nó không thực sự là một câu hỏi thời gian nữa nhưng tôi luôn cảm thấy như lãng phí rất nhiều khi "tải" xml. – ewerybody
pyside-uic.exe MyWindow.ui -o MyWindow.py
là những gì tôi đã làm và nó hoạt động tốt (theo như tôi biết)
Chỉ cần cố gắng Pyside của QUILoader, hoạt động tốt:
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_()
tôi đã sử dụng Eclipse và QTDesigner để tạo ra các tập tin .ui (nhấp chuột phải vào mô-đun, "New -> Khác ..", chọn "Qt Designer - > Mẫu thiết kế Qt "). Không có cuộc gọi uic rõ ràng là cần thiết.
+1 để cung cấp ví dụ hoàn chỉnh, tốt. Với điều này 1 điều tôi đã bị mắc kẹt, tuy nhiên, là QFile trực tiếp đến gói hàng đầu dir cho đường dẫn tập tin, không phải là thư mục nơi mã này cư trú. Chỉ dành cho người bị kẹt trong tương lai. – IsaacS
Vấn đề là, loader.load trả về một đối tượng. Nhưng trong uic, chúng ta có một lớp, sau đó chúng ta có thể phân lớp lớp theo nhu cầu của chúng ta. Nhưng trong loader.load luôn trả về một đối tượng instantiated do đó không có subclassing, không tùy biến. Ngay cả khi nó không thể tải một widget tùy chỉnh: Tham khảo lỗi này: https://bugreports.qt-project.org/browse/PYSIDE-77 – Sarim
Sử dụng QtUiTools (như được đề xuất trong câu trả lời khác) hiện không được nhóm PySide khuyến khích.
Đọc toàn bộ câu chuyện ở đây: 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
Bạn có thể sử dụng cách này để tải giao diện người dùng và cũng có thể nhận form_class cũng như các lớp cơ sở như kiểu trả về ... nhưng nếu bạn không muốn để chuyển đổi, nếu không, Có, đây là cách chính xác.
pyside-uic.exe MyWindow.ui -o MyWindow.py
từ nơi bạn đã dùng pysideuic? Bởi vì nó không có trong gói PySide. – Romulus
Nhìn vào C: \ Python27 \ Lib \ site-packages \ PySide \ scripts \ uic.py (hoặc bất cứ nơi nào bạn đã cài đặt python). Nếu bạn nhìn vào tập lệnh đó, bạn có thể thấy các tùy chọn được gắn nhãn và được mô tả như trong trang hướng dẫn (Tôi không biết cách xem đúng trên các cửa sổ. Các mẹo được đánh giá cao) tại đây http://manpages.ubuntu.com/manpages/precise/man1/pyside-uic.1.html
Tôi đã nhầm lẫn một lúc để xem C: \ Python27 \ Lib \ site-packages \ pysideuic \ pyside-uic.1 như tôi nghĩ rằng đó phải là tệp đang được gọi. Ngay cả cố gắng để xem đó như là một trang hướng dẫn là không thể đối với tôi vì tất cả các nhân vật phụ. Bạn không thể tìm hiểu cú pháp bằng cách cố gắng đoán nhân vật nào là phụ và cú pháp nào không được!
Trên cửa sổ, bạn có thể tự động hóa điều này bằng một tập tin theo lô bằng cách lưu tệp văn bản với dòng được đề cập ở trên (bên dưới để tham chiếu) với đuôi .bat như uic_generator.bat.
MyWindow.ui pyside-UIC -o MyWindow.py
[windows man page reader] (https://stackoverflow.com/a/944571/984421) – ekhumoro
- 1. Trình tạo mã Python
- 2. Tạo một file ZIP được mã hóa bằng Python
- 3. Có cách nào để tạo mã bytecode bằng Python không?
- 4. Tạo các trình tạo mã hóa Python
- 5. Tạo mã bằng Scala
- 6. Mã hóa tệp bằng Python
- 7. Tạo tệp PNG bằng Python
- 8. Tạo tệp trống bằng python
- 9. Giải mã JSON phức tạp bằng Python
- 10. Mã hóa và giải mã bằng python và nodejs
- 11. Tránh các dòng mã dài bằng Python
- 12. Ngăn chặn lỗi mã hóa bằng Python
- 13. Phân tích mã tĩnh bằng Python?
- 14. Unicode và 'giải mã() `bằng Python
- 15. Thực thi mã php bằng Python
- 16. Mã hóa dữ liệu bằng python, giải mã trong php
- 17. Tạo kml từ csv bằng Python
- 18. Tạo mẫu Qt/C++ bằng Python
- 19. Tạo video bằng OpenCV 2.4.0 trong python
- 20. Tạo SVG bằng cách sử dụng Python
- 21. Tạo một WSDL bằng Python và SOAPpy
- 22. Nhận trang được tạo bằng Javascript bằng Python
- 23. Tạo mã bằng cách sử dụng .net
- 24. tạo lại lệnh cat Unix bằng Python
- 25. Cách tạo tệp PDF bằng Python
- 26. Tạo/tổng hợp âm thanh bằng python?
- 27. Tạo UUID cho Cassandra bằng Python
- 28. Cách tạo cặp khóa SSH bằng Python
- 29. Cách tạo một CFuncType bằng Python
- 30. Library để tạo URL bằng Python
Cảm ơn, PySide dường như làm việc như PyQt – ArtDijk
D'oh! Hoàn toàn bỏ lỡ bit PySide. May mắn thay, PyQt4 đã làm rất nhiều điều đúng vì vậy PySide không phải thay đổi nhiều :) – delnan