与QtDesigner的窗口相比,无法正确显示窗口

2024-06-07 16:29:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用PyQt5创建GUI应用程序,我使用QtDesigner创建了UI,结果如下:

QtDesigner Preview

但这个问题是,当我使用Python启动应用程序时,按照我使用的屏幕大小,应用程序没有正确显示:在我的笔记本电脑上(我从上面的QtDesigner屏幕截图中获取),结果如下:

Python viewCropped side bar

(白色部分只是为了使矩形显示不正确而更清晰)

正如你所看到的,左侧栏在我的笔记本电脑上没有正确显示,但在更大的屏幕上,它显示得非常完美,因此我假设屏幕的大小是错误因素,但我不知道如何修复它。为了避免尺寸问题,我是否必须确保使用任何选项

以下是您可以用来获得最小可复制示例的代码:

QtDesigner生成的代码如下所示:

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

################################################################################
## Form generated from reading UI file 'main_mreZokVTK.ui'
##
## Created by: Qt User Interface Compiler version 5.14.1
##
## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################

from PySide2.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
    QRect, QSize, QUrl, Qt)
from PySide2.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont,
    QFontDatabase, QIcon, QLinearGradient, QPalette, QPainter, QPixmap,
    QRadialGradient)
from PySide2.QtWidgets import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(1200, 800)
        MainWindow.setMinimumSize(QSize(1200, 800))
        MainWindow.setMaximumSize(QSize(1200, 800))
        font = QFont()
        font.setPointSize(8)
        MainWindow.setFont(font)
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setSpacing(0)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.verticalLayout.setContentsMargins(10, 10, 10, 10)
        self.drop_shadow_frame = QFrame(self.centralwidget)
        self.drop_shadow_frame.setObjectName(u"drop_shadow_frame")
        self.drop_shadow_frame.setEnabled(True)
        font1 = QFont()
        font1.setPointSize(2)
        font1.setBold(False)
        font1.setWeight(50)
        self.drop_shadow_frame.setFont(font1)
        self.drop_shadow_frame.setStyleSheet(u"background-color:qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(13, 13, 13, 255), stop:0.972851 rgba(103, 103, 103, 255));\n"
"border-radius: 10px\n"
"")
        self.drop_shadow_frame.setFrameShape(QFrame.NoFrame)
        self.drop_shadow_frame.setFrameShadow(QFrame.Raised)
        self.lateral_bar = QFrame(self.drop_shadow_frame)
        self.lateral_bar.setObjectName(u"lateral_bar")
        self.lateral_bar.setGeometry(QRect(0, 0, 90, 781))
        self.lateral_bar.setMinimumSize(QSize(90, 781))
        self.lateral_bar.setMaximumSize(QSize(90, 781))
        self.lateral_bar.setStyleSheet(u"background-color:rgb(20, 20, 20);\n"
"background-color:#000000")
        self.lateral_bar.setFrameShape(QFrame.NoFrame)
        self.lateral_bar.setFrameShadow(QFrame.Raised)
        self.verticalLayout_2 = QVBoxLayout(self.lateral_bar)
        self.verticalLayout_2.setSpacing(0)
        self.verticalLayout_2.setObjectName(u"verticalLayout_2")
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.fonctions = QFrame(self.lateral_bar)
        self.fonctions.setObjectName(u"fonctions")
        self.fonctions.setMinimumSize(QSize(90, 691))
        self.fonctions.setMaximumSize(QSize(90, 691))
        self.fonctions.setFrameShape(QFrame.StyledPanel)
        self.fonctions.setFrameShadow(QFrame.Raised)
        self.verticalLayout_4 = QVBoxLayout(self.fonctions)
        self.verticalLayout_4.setObjectName(u"verticalLayout_4")
        self.Raffles = QFrame(self.fonctions)
        self.Raffles.setObjectName(u"Raffles")
        self.Raffles.setFrameShape(QFrame.StyledPanel)
        self.Raffles.setFrameShadow(QFrame.Raised)
        self.btn_raffles = QPushButton(self.Raffles)
        self.btn_raffles.setObjectName(u"btn_raffles")
        self.btn_raffles.setGeometry(QRect(0, 0, 70, 163))
        self.btn_raffles.setMinimumSize(QSize(0, 0))
        self.btn_raffles.setMaximumSize(QSize(1000, 8000))
        font2 = QFont()
        font2.setFamily(u"MS Sans Serif")
        font2.setPointSize(1)
        self.btn_raffles.setFont(font2)
        self.btn_raffles.setLayoutDirection(Qt.LeftToRight)
        self.btn_raffles.setStyleSheet(u"QPushButton {\n"
"   border-radius:8px;\n"
"   background-color:none;\n"
"   border:2px solid rgb(45, 45, 45);\n"
"   \n"
"}\n"
"\n"
"QPushButton:hover {\n"
"   background-color:rgb(20, 20, 20);\n"
"   border:2px solid rgb(255, 255, 255)\n"
"}\n"
"")
        self.btn_raffles.setIconSize(QSize(64, 64))

        self.verticalLayout_4.addWidget(self.Raffles)


        self.verticalLayout_2.addWidget(self.fonctions)


        self.verticalLayout.addWidget(self.drop_shadow_frame)

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.btn_raffles.setText("")
    # retranslateUi

用于显示应用程序的代码如下所示:

from PySide2 import QtCore
from PySide2.QtCore import (QTime, Qt)
from PySide2.QtGui import (QPixmap)
from PySide2.QtWidgets import *
from PyQt5.QtCore import QThreadPool, QRunnable, pyqtSlot, pyqtSignal, QTimer
import sys
import PyQt5
from ui_main_mre import Ui_MainWindow



class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)



app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())

Tags: fromimportselfbarframedropbtnraffles
1条回答
网友
1楼 · 发布于 2024-06-07 16:29:12

主要的问题是,您正在向小部件(QFrames)添加按钮,并且没有在那里设置任何布局。使用固定几何图形几乎从来都不是一个好主意,而在具有其他布局管理器的UI中这样做几乎总是一个非常糟糕的主意。
记住,你在屏幕上看到的几乎是别人在屏幕上看到的;此外,设计器并不总是在预览中显示实际结果。在您的特定情况下,问题在于当您的代码加载ui时,按钮实际上有点移位,因此它们的内容部分隐藏,因为它们的父级大小(子窗口小部件不能在父级的rect之外绘制)

因此,首先,为包含按钮的所有Qframe(以及任何其他仍然没有布局的小部件)设置布局,如果您的问题是确保按钮占用其容器的整个可用空间,那么将其水平和最重要的垂直大小策略设置为Preferred(默认情况下,Qt按钮不垂直展开)

然后,您的实现还存在其他问题:

  • 中心小部件内的主要小部件是“浮动的”(也称为固定几何体),因此也为中心小部件设置布局
  • 删除按钮的所有大小限制,因为它们是不必要的
  • 避免使用通用样式表,尤其是在父项上设置时;使用selectors总是更好,否则您可能会面临意外行为(尤其是来自高级/自定义小部件)
  • 检查最小/最大尺寸是否一致(按钮图标的最小尺寸大于最大尺寸)
  • 请注意,Qt根据当前的操作系统和使用的样式使用默认布局边距和间距,因此您必须小心使用这些方面非常重要的特殊小部件(在您的示例中为标题栏);如果有疑问,请在布局属性中显式设置这些值(即使您不介意将值设置为默认值),并且请记住,Designer中的每个表单都可以从“表单>;表单设置”对话框中获得布局的默认值(它们不会在Designer中可视化应用,但从代码加载时会得到尊重)

相关问题 更多 >

    热门问题