2012-08-25 30 views
14

Tôi muốn tạo một cửa sổ PyQT4 (QtGui.QMainWindow) nhảy lên phía trước khi ứng dụng nhận được một tin nhắn được chỉ định từ một máy khác. Thông thường cửa sổ được thu nhỏ.Làm thế nào để cửa sổ PyQT4 nhảy lên phía trước?

Tôi đã thử phương pháp raise_()show() nhưng phương pháp này không hoạt động.

Trả lời

13

này hoạt động:

# this will remove minimized status 
# and restore window with keeping maximized/normal state 
window.setWindowState(window.windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive) 

# this will activate the window 
window.activateWindow() 

Cả hai đều cần thiết cho tôi trên Win7.

setWindowState khôi phục cửa sổ thu nhỏ và lấy nét. Nhưng nếu cửa sổ chỉ mất tập trung và không bị thu nhỏ, nó sẽ không tập trung.

activateWindow tập trung nhưng không khôi phục trạng thái thu nhỏ.

Sử dụng cả hai đều có hiệu quả mong muốn.

+1

Cảm ơn rất nhiều. Nó hoạt động. – redice

+0

Điều này không hoạt động đối với tôi nếu tôi đang chạy cửa sổ của mình từ thiết bị đầu cuối !!! –

+0

Làm việc tốt dưới Ubuntu Unity! –

3

Tôi không có bất kỳ may mắn nào với các phương pháp trên, kết thúc bằng việc sử dụng win32 api trực tiếp, sử dụng bản hack cho phiên bản C here. Điều này phù hợp với tôi:

from win32gui import SetWindowPos 
import win32con 

SetWindowPos(window.winId(), 
      win32con.HWND_TOPMOST, # = always on top. only reliable way to bring it to the front on windows 
      0, 0, 0, 0, 
      win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW) 
SetWindowPos(window.winId(), 
      win32con.HWND_NOTOPMOST, # disable the always on top, but leave window at its top position 
      0, 0, 0, 0, 
      win32con.SWP_NOMOVE | win32con.SWP_NOSIZE | win32con.SWP_SHOWWINDOW) 
window.raise_() 
window.show() 
window.activateWindow() 
Các vấn đề liên quan