2013-02-15 22 views
16

Tôi đã sử dụng PyQt trong một thời gian dài và toàn bộ thời gian tôi đã sử dụng nó, đã có một mẫu lập trình khá nhất quán.Làm thế nào để bạn tải các tệp .ui vào các lớp python với PySide?

  1. Sử dụng Qt Thiết kế để tạo tệp .ui.
  2. Tạo một lớp python cùng loại với tiện ích bạn đã tạo trong tệp .ui.
  3. Khi khởi tạo lớp python, hãy sử dụng uic để tự động tải tệp .ui vào lớp.

Có cách nào để làm điều gì đó tương tự trong PySide không? Tôi đã đọc qua tài liệu và các ví dụ và điều gần nhất tôi có thể tìm thấy là một ví dụ về máy tính mà trước khi kết xuất tệp .ui ra mã python, đó là cách làm cũ trong PyQt (tại sao lại nướng nó vào python khi bạn chỉ có thể phân tích cú pháp ui?)

+0

Tôi luôn hình dung nó là tốt hơn để loại bỏ toàn bộ một bước phân tích từ khởi động ứng dụng, và rằng có loadUi động là một tiện ích phát triển hơn. – jdi

+0

@jdi "Tốt hơn" là chủ quan. Hơi nhanh hơn ... có lẽ ..., Nó không phải là nếu mã python ui không phải được phân tích cú pháp, bạn chỉ đơn thuần là thay thế một loại phân tích cú pháp cho một loại khác. Một trong những lợi ích chính của pyqt là luồng công việc lặp lại nhanh chóng. PySide bổ sung thêm một bước nữa để thực hiện IMHO ngược. –

+0

Tôi đồng ý với sự điều chỉnh của bạn. Tôi nên nói nó là "Cá nhân tôi đã tìm thấy nó đơn giản hơn". Và tôi nghĩ có nhiều phân tích hơn liên quan đến việc tải động. Trước tiên, bạn phải phân tích cú pháp và chuyển đổi giao diện người dùng xml -> mã python, sau đó xây dựng các đối tượng ra khỏi đó. – jdi

Trả lời

20

Tôi đang làm chính xác điều đó với PySide. :)

Bạn sử dụng này https://gist.github.com/cpbotha/1b42a20c8f3eb9bb7cb8 (bản gốc bởi Sebastian Wiesner là tại https://github.com/lunaryorn/snippets/blob/master/qt4/designer/pyside_dynamic.py nhưng đã biến mất) - trong đó sẽ ghi đè PySide.QtUiTools.QUiLoader và cung cấp một phương pháp mới loadUi() để bạn có thể làm điều này:

class MyMainWindow(QMainWindow): 
    def __init__(self, parent=None): 
     QMainWindow.__init__(self, parent) 
     loadUi('mainwindow.ui', self) 

Khi bạn khởi tạo MyMainWindow, nó sẽ có giao diện người dùng mà bạn đã thiết kế với Nhà thiết kế Qt.

Nếu bạn cũng cần phải sử dụng các widget tùy chỉnh ("Thúc đẩy To" trong Qt Designer), xem câu trả lời này: https://stackoverflow.com/a/14877624/532513

+0

Xin chào! Liên kết đến github dường như bị hỏng. –

+0

Cảm ơn bạn đã thông báo! Tôi đã tạo sẵn phiên bản pyside_dynamic.py đã sửa đổi của riêng mình làm một ý chính, xem câu trả lời đã sửa đổi. –

Các vấn đề liên quan