Liên kết tệp .ui qtDesigner với python / pyqt?


81

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?


1
Tôi đã sử dụng PySide QUiLoader để đạt được điều đó - xem bài đăng [4442286] [1] [1]: stackoverflow.com/questions/4442286
Sven

Phương pháp sau thậm chí còn thực tế hơn: stackoverflow.com/questions/14892713/…
iled

Câu trả lời:


61

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 uicbiê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.


2
Bạn có thể thêm cách truy cập một biến sau khi hoàn thành không? Chẳng hạn như pushButton?
Jonathan

2
@JonathanLeaders Nếu có một nút được xác định trong tệp .ui, bạn chỉ cần gọi nó như sau: self.pushButton. Bạn cũng có thể tải ui vào bất kỳ thuộc tính lớp nào bạn muốn: uic.loadUi ('uifile.ui', self.ui) và gọi các widget và những thứ như self.ui.pushButton.
Maxim Popravko

48

Kết hợp câu trả lời của Maxbà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.uitệp có chứa QMainWindow(vì vậy chỉ cần chọn tạo Cửa sổ chính trong File-Newhộ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_())

3
Đây nên là câu trả lời tốt nhất, bởi vì nó là một ví dụ hoàn chỉnh.
Francesco Pasa

29

Bạn cần tạo tệp python từ tệp ui của mình bằng công cụ pyuic (site-pack \ pyqt4 \ bin)

pyuic form1.ui > form1.py

với pyqt4

pyuic4.bat form1.ui > form1.py

Sau đó, bạn có thể nhập form1 vào tập lệnh của mình.


25

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 đó.

  1. Khởi động Qt Designer từ menu bắt đầu của bạn.
  2. Từ cửa sổ "Biểu mẫu mới", tạo "Cửa sổ chính"
  3. Từ "Tiện ích hiển thị" về phía cuối "Menu hộp tiện ích" ở phía bên trái, hãy
    thêm "Tiện ích nhãn". (Nhấp vào Kéo và thả)
  4. Nhấp đúp vào Tiện ích Nhãn mới được thêm vào để đổi tên của nó thành "Hello World"
  5. tại thời điểm này, bạn có thể sử dụng phím nóng Control + R để xem nó sẽ như thế nào.
  6. Thêm các nút hoặc văn bản hoặc các tiện ích khác bằng cách kéo và thả nếu bạn muốn.
  7. Bây giờ hãy lưu biểu mẫu của bạn .. File-> Save As-> "Hello World.ui" (Control + S cũng sẽ hiển
    thị tùy chọn "Save As") Lưu ý thư mục mà bạn đã lưu
    tệp .ui "Hello World" của mình . (Tôi đã lưu của tôi trong (C :) để thuận tiện)

Tệp được tạo và lưu, bây giờ chúng ta sẽ Tạo mã Python từ nó bằng pyuic!

  1. Từ menu bắt đầu của bạn, hãy mở một cửa sổ lệnh.
  2. Bây giờ "cd" vào thư mục mà bạn đã lưu "Hello World.ui". Đối với tôi, tôi chỉ phải nhập "cd \" và ở dấu nhắc "C:>" của tôi, nơi "Hello World.ui" của tôi đã được lưu vào.
  3. Khi bạn đến thư mục lưu trữ tệp của bạn, hãy nhập như sau.
  4. pyuic4 -x helloworld.ui -o helloworld.py
  5. Xin chúc mừng!! Bây giờ bạn có một ứng dụng GUI Qt4 python !!
  6. Nhấp đúp vào tệp helloworld.py của bạn để chạy nó. (Tôi sử dụng pyscripter và khi nhấp đúp,
    nó sẽ mở trong pyscripter, sau đó tôi "chạy" tệp từ đó)

Hy vọng điều này sẽ giúp ai đó.


1
Tôi đang biên dịch bằng: pyuic4 helloworld.ui> helloworld.py. Người ta thực sự phải chuyển các đối số -x và -o cho pyuic4. Cảm ơn vì thông tin!.
muammar

Lời giải thích tuyệt vời, đặc biệt là "thế hệ của GUI" -code thực sự nằm trong tệp được tạo đã giúp tôi giải thích, chúc mừng!
Valmond

16

Bạn cũng có thể sử dụng uictrong 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_())

12

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.pymà người thiết kế có thể ghi đè. Bạn chỉ cần tham khảo uiqua MyWindowlớ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?
Ahsanul Haque

9

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ó.


FYI Nếu bạn bỏ qua tùy chọn -x, bạn sẽ không nhận được phần mã tạo và chạy ứng dụng. Tôi đã thấy một số câu trả lời bỏ qua "-x". Câu trả lời này là đầy đủ nhất.
Không phải là một cái máy,

5

bạn có thể biên dịch các tệp ui như thế này

pyuic4 -x helloworld.ui -o helloworld.py

4

Để biên dịch tệp .ui thành tệp .py, tôi đã làm:

python pyuic.py form1.ui > form1.py

Att.


2

trong pyqt5 để chuyển đổi từ tệp ui sang tệp .py

pyuic5.exe youruifile.ui -o outputpyfile.py -x


0

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.


0

( 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.