Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么赢了';我的主窗口是否在屏幕上正确居中?_Python_Qt_Python 3.x_Pyqt_Pyqt5 - Fatal编程技术网

Python 为什么赢了';我的主窗口是否在屏幕上正确居中?

Python 为什么赢了';我的主窗口是否在屏幕上正确居中?,python,qt,python-3.x,pyqt,pyqt5,Python,Qt,Python 3.x,Pyqt,Pyqt5,我试图将主窗口置于屏幕中央,但这两种常用方法都不起作用。他们都把它放得太低了,而且有点偏离中心宽度。以下是我尝试过的: 方法一: 方式二: 请注意,在执行此操作之前,我将宽度和高度设置为: screen = QDesktopWidget().screenGeometry() ww = int(screen.width() / 1.5) wh = int(screen.height() / 2) self.resize(ww, wh) 您正在将小

我试图将主窗口置于屏幕中央,但这两种常用方法都不起作用。他们都把它放得太低了,而且有点偏离中心宽度。以下是我尝试过的:

方法一: 方式二: 请注意,在执行此操作之前,我将宽度和高度设置为:

screen = QDesktopWidget().screenGeometry()
        ww = int(screen.width() / 1.5)
        wh = int(screen.height() / 2)

        self.resize(ww, wh)

您正在将小部件的左上角移动到屏幕中心,这就是它不居中的原因。您应该考虑小部件的大小

x = QApplication().desktop().screenGeometry().center().x()
y = QApplication().desktop().screenGeometry().center().y()
self.move(x - self.geometry().width()/2, y - self.geometry().height()/2)
编辑:

如果self是主窗口,则此选项有效。如果它是一个具有父级的小部件,move将移动(x,y)将相对其父级移动您的小部件。应使用以下命令将下面的坐标(全局坐标)转换为父坐标:

QPoint QWidget.mapFromGlobal (self, QPoint)

您正在将小部件的左上角移动到屏幕中心,这就是它不居中的原因。您应该考虑小部件的大小

x = QApplication().desktop().screenGeometry().center().x()
y = QApplication().desktop().screenGeometry().center().y()
self.move(x - self.geometry().width()/2, y - self.geometry().height()/2)
编辑:

如果self是主窗口,则此选项有效。如果它是一个具有父级的小部件,move将移动(x,y)将相对其父级移动您的小部件。应使用以下命令将下面的坐标(全局坐标)转换为父坐标:

QPoint QWidget.mapFromGlobal (self, QPoint)

经过计算后,您是否验证了这些值?也就是说,它们是否正确且
move()
setGeometry()
未按预期使用它们?您是否尝试打印出返回的屏幕矩形、窗口尺寸和正在计算的最终窗口位置?也许这会给你一些提示,说明为什么它不起作用。同样的代码在我的机器上运行得很好(方式1),所以我最好的猜测是,要么您正在以不同的分辨率运行多个监视器(调用screenGeometry()返回主监视器的几何体),或者在运行代码后,有一段恶意代码在调整窗口大小或移动窗口。计算后是否验证了值?也就是说,它们是否正确且
move()
setGeometry()
未按预期使用它们?您是否尝试打印出返回的屏幕矩形、窗口尺寸和正在计算的最终窗口位置?也许这会给你一些提示,说明为什么它不起作用。同样的代码在我的机器上运行得很好(方式1),所以我最好的猜测是,要么您正在以不同的分辨率运行多个监视器(调用screenGeometry()返回主监视器的几何体),或者在运行代码后,您有一些恶意代码调整了窗口的大小或移动了窗口。这将窗口移动到了左下角。您是否也像我那样更改了X和Y?是的,我基本上复制并粘贴了一个小部件或主窗口?因为如果self是一个小部件,move将相对于其父小部件移动它。您应该使用mapFromGlobal将全局坐标转换为父窗口小部件坐标。我编辑了这篇文章。我认为这是一个主窗口,尽管我的基本结构是,我有一个从Qt designer生成的ui.py文件,然后是另一个继承生成的类的类,这就是我进行更改的地方。然后我有另一个类继承这个和主窗口。所以在这一点上它不是一个主窗口?对不起,这很复杂,我知道这不是一个好办法。虽然移动主窗口的继承并不能解决将窗口移动到左下角的问题,但您是否也像我那样更改了X和Y?是的,我基本上复制并粘贴了一个小部件或主窗口?因为如果self是一个小部件,move将相对于其父小部件移动它。您应该使用mapFromGlobal将全局坐标转换为父窗口小部件坐标。我编辑了这篇文章。我认为这是一个主窗口,尽管我的基本结构是,我有一个从Qt designer生成的ui.py文件,然后是另一个继承生成的类的类,这就是我进行更改的地方。然后我有另一个类继承这个和主窗口。所以在这一点上它不是一个主窗口?对不起,这很复杂,我知道这不是一个好办法。虽然移动主窗口的继承并不能解决这个问题