2012-02-20 34 views
15

Mã này hoạt động, nhưng tôi tự hỏi, nếu có bất kỳ cách đơn giản hơn:Làm thế nào để tạo một widget ở trung tâm của màn hình trong PySide/PyQt?

def center(self): 
    qr = self.frameGeometry() 
    cp = gui.QDesktopWidget().availableGeometry().center() 
    qr.moveCenter(cp) 
    self.move(qr.topLeft()) 
+4

Điều này có vẻ như về ngay khi bạn có thể nhận được nó cho tôi. – jdi

+1

Đoạn trích đẹp từ ZetCode. Tôi tự hỏi nếu có một số cách ngắn hơn, quá. –

Trả lời

5

Không, đó là cách đơn giản nhất. Dưới đây là một đoạn tôi đã sử dụng trong C++:

QRect desktopRect = QApplication::desktop()->availableGeometry(this); 
    QPoint center = desktopRect.center(); 

    move(center.x() - width() * 0.5, center.y() - height()); 
+2

Tôi nghĩ tốt hơn nên sử dụng 'frameGeometry()' như trong mã OP thay vì 'width()' và 'height()' ([Qt. Window Geometry] (http://developer.qt.nokia.com/doc/ qt-4.8/application-windows.html # window-geometry)) – reclosedev

15

chỉ cần thêm dòng này vào cửa sổ chính của bạn:

self.move(QtGui.QApplication.desktop().screen().rect().center()- self.rect().center()) 
7
self.move(QDesktopWidget().availableGeometry().center() - self.frameGeometry().center()) 
+0

Tôi đã thay đổi đối số thứ hai để làm cho nó tập trung hơn. –

1

Just another "func kiểu" chẳng hạn. Nếu bạn sử dụng nó nhiều lần.

screen_center = lambda widget: QApplication.desktop().screen().rect().center()- widget.rect().center() 

Và mỗi lần trong mã:

widget.move(screen_center(widget)) 
Các vấn đề liên quan