我正在使用Qt
在python中编写我想创建应用程序窗口(带有装饰)以占据整个屏幕大小。目前这是我的代码:
avGeom = QtGui.QDesktopWidget().availableGeometry()
self.setGeometry(avGeom)
问题是它忽略了窗户装饰,所以框架更大......我用谷歌搜索了什么不是,发现这个:
http://harmattan-dev.nokia.com/docs/library/html/qt4/application-windows.html#window-geometry
这似乎表明我需要将frameGeometry设置为avGeom
但是我还没有找到办法做到这一点。此外,在上面链接的评论中,它说我所追求的可能是不可能的,因为程序无法在运行之前设置frameGeometry ...如果是这种情况我只是想确认我的问题不可解决
编辑:
所以我玩了一些代码,这给了我想要的东西......但是数字24基本上是通过试验和错误,直到窗口标题可见....我想要一些更好的方法来做到这一点。 ..这是独立的窗口管理器..
avGeom = QtGui.QDesktopWidget().availableGeometry()
avGeom.setTop(24)
self.setGeometry(avGeom)
现在我可以做我想要的但纯粹出于反复试验
使用Spyder作为IDE运行Ubuntu
感谢
答案 0 :(得分:5)
使用QtGui.QApplication().desktop().availableGeometry()
作为窗口大小:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from PyQt4 import QtGui, QtCore
class MyWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.pushButtonClose = QtGui.QPushButton(self)
self.pushButtonClose.setText("Close")
self.pushButtonClose.clicked.connect(self.on_pushButtonClose_clicked)
self.layoutVertical = QtGui.QVBoxLayout(self)
self.layoutVertical.addWidget(self.pushButtonClose)
titleBarHeight = self.style().pixelMetric(
QtGui.QStyle.PM_TitleBarHeight,
QtGui.QStyleOptionTitleBar(),
self
)
geometry = app.desktop().availableGeometry()
geometry.setHeight(geometry.height() - (titleBarHeight*2))
self.setGeometry(geometry)
@QtCore.pyqtSlot()
def on_pushButtonClose_clicked(self):
QtGui.QApplication.instance().quit()
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
app.setApplicationName('MyWindow')
main = MyWindow()
main.show()
sys.exit(app.exec_())
答案 1 :(得分:0)
我总是发现从QMainWindow类继承特别有用。像这样:
import sys
from PySide.QtGui import *
from PySide.QtCore import *
class Some_APP(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
### this line here is what you'd be looking for
self.setWindowState(Qt.WindowMaximized)
###
self.show()
def main():
app = QApplication(sys.argv)
some_app = Some_APP()
sys.exit(app.exec_())
if __name__ == "__main__":
main()