Contents

【转】原创作品,允许转载。转载时请务必以超链接形式标明文章原始出处、作者信息和本声明,否则将追究法律责任。
http://www.cnblogs.com/caomingongli/archive/2011/09/19/2181842.html

问题:用PyQt来模仿实现Web桌面的问题之一,便是设置无边框窗口时遮盖任务栏的问题。

解决方案:

  • 设置窗口标记,实现无边框效果
1
2
# 设置窗口标记(无边框)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)


  • 覆盖实现最大化函数

    得到屏幕可显示尺寸,需要用到QDeskWidget类的availableGeometry函数
1
2
3
4
# 得到桌面控件
desktop = QtGui.QApplication.desktop()
# 得到屏幕可显示尺寸
rect = desktop.availableGeometry()


  • 设置窗口尺寸为屏幕可显示尺寸并显示
1
2
3
4
# 设置窗口尺寸
self.setGeometry(rect)
# 设置窗口显示
self.show()


  • 实现效果


  • 示例程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# coding=gbk
# 导入模块
import sys
from PyQt4 import QtGui,QtCore
######################################### 自定义窗口类 ########################################
class MyWindow(QtGui.QMainWindow):
'''自定义窗口类'''
###################################### 构造、析构函数 ###################################
def __init__(self,parent=None):
'''构造函数'''
# 调用父类构造函数
super(MyWindow,self).__init__(parent)
# 设置窗口标记(无边框|任务栏右键菜单)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowSystemMenuHint)
# 便于显示,设置窗口背景颜色(采用QSS)
self.setStyleSheet('''background-color:cyan;''')
####################################### 覆盖函数 #######################################
def showMaximized(self):
'''最大化'''
# 得到桌面控件
desktop = QtGui.QApplication.desktop()
# 得到屏幕可显示尺寸
rect = desktop.availableGeometry()
# 设置窗口尺寸
self.setGeometry(rect)
# 设置窗口显示
self.show()
########################################### 主函数 #########################################
if __name__ == "__main__":
'''主函数'''
# 声明变量
app = QtGui.QApplication(sys.argv)
# 创建窗口
window = MyWindow()
# 调用最大化显示
window.showMaximized()
# 应用程序事件循环
sys.exit(app.exec_())
Contents