2013-11-21 2 views
1

PySide 및 Python 2.7로 프로그램을 작성하고 있습니다.PySide, 창을 작업 표시 줄에 도킹

class SystemTrayIcon(QtGui.QSystemTrayIcon): 
    def __init__(self, parent=None): 

     QtGui.QSystemTrayIcon.__init__(self, parent) 

     self.setIcon(QtGui.QIcon("myIcon.ico")) 

     self.iconMenu = QtGui.QMenu(parent) 
     appcalc = self.iconMenu.addAction("ShowWindow") 
     appexit = self.iconMenu.addAction("Exit") 
     self.setContextMenu(self.iconMenu) 

     self.connect(appcalc, QtCore.SIGNAL('triggered()'),self.appCalc) 
     self.connect(appexit,QtCore.SIGNAL('triggered()'),self.appExit) 

     self.show() 

이 코드는 iconMenu가있는 작업 표시 줄 아이콘을 표시합니다. 이제 "쇼 윈도우"를 클릭하면 위젯/윈도우가 아이콘의 같은 위치에 작업 표시 줄에 도킹되어로드됩니다.

사람들이 화면 상단이나 작업 표시 줄에 있기 때문에 기하학을 사용하면이 기능이 작동하지 않습니다.

PySide를 사용하여 작업 표시 줄에 창/위젯을 도킹하는 방법은 무엇입니까?

감사합니다.

답변

2

당신은 작업 표시 줄의 크기와 방향을 해결하기 위해 QDesktopWidget.availableGeometry()QDesktopWidget.screenGeometry()의 조합을 사용할 수 있어야합니다 :

>>> d = qApp.desktop() 
>>> d.screenGeometry() 
PySide.QtCore.QRect(0, 0, 1600, 900) 
>>>> 
>>> d.availableGeometry() # taskbar at top 
PySide.QtCore.QRect(0, 36, 1600, 864) 
>>> d.availableGeometry() # taskbar on left 
PySide.QtCore.QRect(36, 0, 1564, 900) 
>>> 
>>> d.availableGeometry() # taskbar at bottom 
PySide.QtCore.QRect(0, 0, 1600, 864) 
>>> d.availableGeometry() # taskbar on right 
PySide.QtCore.QRect(0, 0, 1564, 900) 

을 당신은 x() 또는 y()가 0이 아닌 경우,을 볼 수 있듯이 작업 표시 줄이 위쪽이나 왼쪽에 있습니다. 그렇지 않은 경우 width() 또는 height()이 화면 값보다 작 으면 작업 표시 줄이 맨 아래 또는 오른쪽에 있습니다 (위의 항목 중 어느 것도 해당되지 않으면 작업 표시 줄이 없음).

그런 다음 QSystemTrayIcon.geometry()을 사용하여 작업 표시 줄을 기준으로 창의 위치를 ​​계산할 수 있습니다.

PS :

일부 윈도우 관리자는 처음에 위치 할 때 창을 배치 할 수 없거나이 최대화 될 때 마진의 개념을 가지고있다. 이 여백은 종종 데스크탑의 가장자리가 항상 마우스에 액세스 할 수 있도록 1 ~ 2 픽셀로 설정됩니다.

따라서 대상 플랫폼에 따라 작업 표시 줄의 크기와 방향을 계산할 때이를 고려해야 할 수도 있습니다.

+0

안녕하세요, 덕분에 좋은 생각 인 것 같아요. 내가 GUI와 QT를 가진 완전한 멍청한 놈이라는 것을 이해하려고 노력할 것입니다. 내 계획은 크로스 플랫폼으로 만드는 것입니다. 오늘 너의 생각을 시험해 보겠다. – NoobTom