当前位置: 首页 > 知识库问答 >
问题:

查看宽度和高度

常雅珺
2023-03-14

文件:main。派克

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'main.ui'
#
# Created by: PyQt5 UI code generator 5.15.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setSpacing(0)
        self.gridLayout.setObjectName("gridLayout")
        self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
        self.scrollArea.setWidgetResizable(True)
        self.scrollArea.setObjectName("scrollArea")
        self.scrollAreaWidgetContents = QtWidgets.QWidget()
        self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 798, 598))
        self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.scrollAreaWidgetContents)
        self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_2.setSpacing(0)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.graphicsView = QtWidgets.QGraphicsView(self.scrollAreaWidgetContents)
        self.graphicsView.setMinimumSize(QtCore.QSize(0, 0))
        self.graphicsView.setObjectName("graphicsView")
        self.gridLayout_2.addWidget(self.graphicsView, 0, 0, 1, 1)
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)
        self.gridLayout.addWidget(self.scrollArea, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

文件:run_me.py

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from main import Ui_MainWindow as Ui_MainWindow

import sys

class Main_Code:
    def __init__(self):
        self.app = QtWidgets.QApplication(sys.argv)
        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.MainWindow)
        self.MainWindow.showMaximized()
        
        self.set_input_data()
        self.set_view_variables()
        self.print_lines()
        
        sys.exit(self.app.exec_())
    
    
    def set_input_data(self):
        self.schedule_items = []
        self.schedule_items.append({"title":"Title for schedule item 1","duration milliseconds":1000*51})
        self.schedule_items.append({"title":"Title for schedule item 2","duration milliseconds":1000*120})
        self.schedule_items.append({"title":"Title for schedule item 3","duration milliseconds":1000*500})
        self.live_duration = 1000*60*60*2.5 #2 hours and 30 minutes
    
        
    def set_view_variables(self):
        self.header_timeline_height = 40
        self.schedule_items_height_spacing = 50
        self.schedule_item_timeline_height = 40
        self.schedule_item_movable_height = 120
        
        #get QGraphicsView dimensions
        self.ui.graphicsView.setAlignment(Qt.AlignTop | Qt.AlignLeft)
        self.available_width = self.ui.graphicsView.width()
        self.available_height = self.ui.graphicsView.height() 
        self.ui.graphicsView.resize(self.available_width, self.available_height)
        
        
    def print_lines(self):
        #print timeline line (top)
        self.MainWindow.setStyleSheet("background-color: black;")
        self.ui.graphicsView.setStyleSheet("background-color: yellow;")
        self.scene = QtWidgets.QGraphicsScene()
        self.scene.setBackgroundBrush(QtGui.QBrush(Qt.red))
        self.ui.graphicsView.setScene(self.scene)
        self.ui.graphicsView.setSceneRect(0,0,self.available_width,self.available_height)
        
        self.timeline_line_top = QtWidgets.QGraphicsLineItem(0,self.MainWindow.height(),self.available_width,0)
        self.scene.addItem( self.timeline_line_top )
        
program = Main_Code()

我试图从左下角到右上角画一条线。

我认为这可能是一个尺度问题(变量self.available\u width,self.available\u height)。

我做错了什么?

共有1个答案

戈华茂
2023-03-14

调整大小(和许多其他几何属性)不同步更新,而是将标志(如最大化)或所需大小(使用调整大小()方法)发送到操作系统(通过库)以修改现有窗口,然后操作系统实现它返回应用更改后得到的值。因此,不建议立即进行计算,而是给它一个延迟:

from PyQt5 import QtCore, QtGui, QtWidgets
from main import Ui_MainWindow as Ui_MainWindow

import sys


class Main_Code:
    def __init__(self):
        self.app = QtWidgets.QApplication(sys.argv)
        self.MainWindow = QtWidgets.QMainWindow()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self.MainWindow)
        self.MainWindow.showMaximized()

        self.init_ui()

        sys.exit(self.app.exec_())

    def init_ui(self):
        self.ui.graphicsView.setAlignment(QtCore.Qt.AlignTop | QtCore.Qt.AlignLeft)

        self.MainWindow.setStyleSheet("background-color: black;")
        self.ui.graphicsView.setStyleSheet("background-color: yellow;")
        self.scene = QtWidgets.QGraphicsScene()
        self.scene.setBackgroundBrush(QtGui.QBrush(QtCore.Qt.red))
        self.ui.graphicsView.setScene(self.scene)

        QtCore.QTimer.singleShot(100, self.draw_line)

    def draw_line(self):
        r = self.ui.graphicsView.mapToScene(
            self.ui.graphicsView.viewport().rect()
        ).boundingRect()
        self.timeline_line_top = QtWidgets.QGraphicsLineItem(
            QtCore.QLineF(r.bottomLeft(), r.topRight())
        )
        self.scene.addItem(self.timeline_line_top)


program = Main_Code()
 类似资料:
  • 主要内容:1. width,2. height,3. max-width 和 max-height,4. min-width 和 min-heightCSS 尺寸属性指的就是元素的宽度和高度属性,虽然说非常简单,但却是必须掌握的技能。CSS 中提供了 width、height、max-width、min-width、max-height 和 min-height 等几个属性来设置元素的宽度和高度,这些元素使用起来非常简单,下面我们就来简单介绍一下。 1. width 通过 width 属性可以设

  • 前面我们提到HTML元素的尺寸(高或宽)是动态的,会随着内容调整。不过我们也可以为元素设定固定的尺寸大小。 blockquote{ width: 600px;} 上面的 blockquote 将始终保持600px的宽度,如果浏览器窗口小于600px,将显示一个水平滚动条。 因为我们只设置了宽度,那么这个 blockquote 的高度仍然是动态的,会自动调整来适应内容。 CSS 溢出(overflo

  • 我的游戏使用什么高度和宽度有关系吗?在我的游戏中,我有几个多边形,它们都与我画过的图像相连,但当我有800x480的宽度和高度时,我必须把图像画得很小,这导致它们变得模糊。而且,我真的不明白这在不同尺寸的手机屏幕上是如何表现的…我所画的图像是被拉长了,还是它们仍然很小,即使是在大平板上?所以我的问题是,在一个libgdx游戏中,最优的宽度和高度是多少? 这是我代码的一部分,也许可以帮助您理解我的意

  • 问题内容: 我试图找到屏幕的宽度和高度,但是我尝试过的任何方法都无法在我创建的类中使用,下面是我的代码。 有人知道如何找到它吗?我无法使用下面尝试的方式,因为.getWidth()已弃用? 问题答案: 使用以下代码

  • 组件的高度和宽度决定了其在屏幕上显示的尺寸。 指定宽高 最简单的给组件设定尺寸的方式就是在样式中指定固定的 width 和 height 。React Native 中的尺寸都是无单位的,表示的是与设备像素密度无关的逻辑像素点。 export default class HelloWorld extends Component { render() { return ( <

  • 我试图根据浏览器的最小高度和最小宽度在我的页面上更改CSS,所以我使用这个: 但出于某种原因,这不起作用。我可以检查“最小高度”和“最大宽度”(反之亦然),或者同时检查“最大高度”和“最大宽度”,但检查“最小高度”和“最大宽度”似乎都不起作用。 我应该详细说明这一点:我希望浏览器在最小高度或最小宽度变为真时起作用。仅当两个条件均为真时,使用and运算符才有效。 我做错什么了吗?