Vì vậy, nếu tôi truy cập QtDesigner và xây dựng giao diện người dùng, nó sẽ được lưu dưới dạng tệp .ui. Làm cách nào để tạo tệp này dưới dạng tệp python hoặc sử dụng tệp này trong python?
Vì vậy, nếu tôi truy cập QtDesigner và xây dựng giao diện người dùng, nó sẽ được lưu dưới dạng tệp .ui. Làm cách nào để tạo tệp này dưới dạng tệp python hoặc sử dụng tệp này trong python?
Câu trả lời:
Một cách khác để sử dụng .ui trong mã của bạn là:
from PyQt4 import QtCore, QtGui, uic
class MyWidget(QtGui.QWidget)
...
#somewhere in constructor:
uic.loadUi('MyWidget.ui', self)
cả hai cách tiếp cận đều tốt. Đừng quên rằng nếu bạn sử dụng các tệp tài nguyên Qt (cực kỳ hữu ích) cho các biểu tượng, v.v., bạn cũng phải biên dịch nó:
pyrcc4.exe -o ui/images_rc.py ui/images/images.qrc
Lưu ý, khi uic
biên dịch giao diện sẽ thêm 'import images_rc' vào cuối tệp .py, vì vậy bạn phải biên dịch tài nguyên vào tệp với tên này hoặc đổi tên nó bằng mã đã tạo.
Kết hợp câu trả lời của Max và bài đăng trong danh sách gửi thư của Shriramana Sharma , tôi đã xây dựng một ví dụ làm việc nhỏ để tải mywindow.ui
tệp có chứa QMainWindow
(vì vậy chỉ cần chọn tạo Cửa sổ chính trong File-New
hộp thoại của Nhà thiết kế Qt ).
Đây là mã tải nó:
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_())
Tôi thấy bài viết này rất hữu ích.
http://talk.maemo.org/archive/index.php/t-43663.html
Tôi sẽ mô tả ngắn gọn các thao tác để tạo và thay đổi tệp .ui thành tệp .py, lấy từ bài viết đó.
Tệp được tạo và lưu, bây giờ chúng ta sẽ Tạo mã Python từ nó bằng pyuic!
Hy vọng điều này sẽ giúp ai đó.
Bạn cũng có thể sử dụng uic
trong PyQt5 với mã sau.
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_())
Cách rõ ràng hơn theo ý kiến của tôi là đầu tiên xuất khẩu sang .py như đã nói ở trên:
pyuic4 foo.ui > foo.py
Và sau đó sử dụng nó bên trong mã của bạn (ví dụ main.py
), như:
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()
Cách này cung cấp khả năng cho những người khác không sử dụng qt-designer để đọc mã và cũng giữ cho mã chức năng của bạn ở bên ngoài foo.py
mà người thiết kế có thể ghi đè. Bạn chỉ cần tham khảo ui
qua MyWindow
lớp như đã thấy ở trên.
self.ui.okButton.clicked.connect(self.function_name)
cho tôi TypeError: event() takes 1 positional argument but 2 were given
. Bạn đã giải quyết nó như thế nào?
Bạn có thể chuyển đổi các tệp .ui của mình thành tệp python thực thi bằng lệnh dưới đây ..
pyuic4 -x form1.ui > form1.py
Bây giờ bạn có thể ngay lập tức thực thi tệp python như
python3(whatever version) form1.py
Bạn có thể nhập tệp này và bạn có thể sử dụng nó.
trong pyqt5 để chuyển đổi từ tệp ui sang tệp .py
pyuic5.exe youruifile.ui -o outputpyfile.py -x
Sử dụng Anaconda3 (tháng 9 năm 2018) và nhà thiết kế QT 5.9.5. Trong trình thiết kế QT, lưu tệp của bạn dưới dạng ui. Mở lời nhắc Anaconda. Tìm kiếm tệp của bạn: cd C: .... (sao chép / dán đường dẫn truy cập tệp của bạn). Sau đó viết: pyuic5 -x helloworld.ui -o helloworld.py (helloworld = tên tệp của bạn). Đi vào. Khởi chạy Spyder. Mở tệp .py của bạn.
( Tháng 11 năm 2020 ) Điều này đã hiệu quả với tôi ( UBUNTU 20.04 ):
pyuic5 /home/someuser/Documents/untitled.ui > /home/someuser/Documents/untitled.py