上面的代码奇怪地有一个问题。我不明白为什么,但如果我将y
窗口的大小设置为923
以上,则窗口不会放在屏幕中间。它会进入屏幕的左上角。
from PyQt5.QtWidgets import QApplication,QDesktopWidget,QMainWindow
from PyQt5 import QtCore
import sys
class cssden(QMainWindow):
def __init__(self):
super().__init__()
self.mwidget = QMainWindow(self)
self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
#size
self.setFixedSize(1100,923) # <--- set this 924 and more
self.center # <-- function that set the window middle of the screen
self.show()
def center(self): # <-- center function
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.move(qr.topLeft())
app = QApplication(sys.argv)
app.setStyleSheet("QMainWindow{background-color: rgb(30,30,30);border: 1px solid black}")
ex = cssden()
sys.exit(app.exec_())
为什么呢?这是关于我的屏幕的分辨率是1920x1080?我只是不明白为什么数字是923
以及如何解决这个问题。
修改:在923
为什么它会进入屏幕的左上角之后,事实证明PyQt会自动居中窗口?每种分辨率都有默认数字吗?
答案 0 :(得分:0)
从此答案中尝试此解决方案:PyQt4 center window on active screen
def center(self):
frameGm = self.frameGeometry()
screen = QtGui.QApplication.desktop().screenNumber(QtGui.QApplication.desktop().cursor().pos())
centerPoint = QtGui.QApplication.desktop().screenGeometry(screen).center()
frameGm.moveCenter(centerPoint)
self.move(frameGm.topLeft())
此功能基于鼠标点所在的位置。它用 screenNumber函数用于确定鼠标所在的屏幕 当前活跃于。然后它找到该监视器的screenGeometry 和那个屏幕的中心点。使用这种方法,你应该 即使监视器,也能将窗口置于屏幕中央 决议是不同的。