RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1228443
Accepted
dark_buckwheat
dark_buckwheat
Asked:2022-01-08 06:06:09 +0000 UTC2022-01-08 06:06:09 +0000 UTC 2022-01-08 06:06:09 +0000 UTC

奇怪的工作QGridLayout

  • 772

我正在编写一个 PyQt5 项目,它由几个窗口组成。项目本身已经处于最后阶段,所以我开始添加窗口布局。除了一扇窗户外,所有窗户都一切顺利。我还是 Qt 的新手,所以花了一天时间寻找解决方案后,我放弃了,来到了这里。

我希望窗口缩放并看起来像这样:

在此处输入图像描述

但是当我尝试缩放窗口时,它看起来像这样:

在此处输入图像描述

出于某种原因,当您尝试拉伸时,窗口QLineEdit只会在长度上增长。我究竟做错了什么?

这是代码:

class Ui_Append(object):
    def setupUi(self, AppendWindow):
        AppendWindow.resize(500, 250)
        self.centralwidget = QtWidgets.QWidget(AppendWindow)
        self.centralwidget.setObjectName("centralwidget")

        self.time = QtWidgets.QTimeEdit(self.centralwidget)
        self.time.setGeometry(QtCore.QRect(50, 85, 170, 40))
        self.time.setObjectName("timeEditWidget")
        font = QtGui.QFont('Times new roman', 16)
        font.setBold(True)
        self.time.setFont(font)
        self.time.setMinimumWidth(170)

        self.lable_1 = QtWidgets.QLabel(self.centralwidget)
        self.lable_1.setGeometry(QtCore.QRect(50, 40, 170, 40))
        self.lable_1.setObjectName("lable_1Widget")
        font = QtGui.QFont('Times new roman', 16)
        font.setBold(True)
        self.lable_1.setFont(font)
        self.lable_1.setText('Выберите время')
        self.lable_1.setMinimumWidth(170)

        self.line = QtWidgets.QLineEdit(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(280, 85, 170, 40))
        self.line.setObjectName("lineEditWidget")
        font = QtGui.QFont('Times new roman', 16)
        font.setBold(True)
        self.line.setFont(font)
        self.line.setMinimumWidth(170)

        self.lable_2 = QtWidgets.QLabel(self.centralwidget)
        self.lable_2.setGeometry(QtCore.QRect(280, 40, 170, 40))
        self.lable_2.setObjectName("lable_2Widget")
        font = QtGui.QFont('Times new roman', 16)
        font.setBold(True)
        self.lable_2.setFont(font)
        self.lable_2.setText('Введите значение')
        self.lable_2.setMinimumWidth(170)

        self.push = QtWidgets.QPushButton(self.centralwidget)
        self.push.setGeometry(QtCore.QRect(160, 160, 180, 40))
        font = QtGui.QFont('Times new roman', 16)
        font.setBold(True)
        self.push.setFont(font)
        self.push.setText('Подтвердить')
        self.push.setMinimumWidth(180)

        AppendWindow.setCentralWidget(self.centralwidget)


class AppendWindow(QMainWindow, Ui_Append):
    def __init__(self, parent=None):
        super(AppendWindow, self).__init__(parent)
        self.parent = parent

        self.setupUi(self)
        self.setWindowTitle('Новая запись')

        self.push.clicked.connect(self.get_value)

        self.grid = QtWidgets.QGridLayout(self.centralwidget)
        self.grid.setContentsMargins(20, 20, 20, 20)
        self.grid.setHorizontalSpacing(20)
        self.grid.setVerticalSpacing(20)
        self.grid.setRowStretch(0, 0)
        self.grid.setRowStretch(1, 1)

        self.grid.addWidget(self.lable_1, 0, 0)
        self.grid.addWidget(self.lable_2, 0, 1)
        self.grid.addWidget(self.time, 1, 0)
        self.grid.addWidget(self.line, 1, 1, 1, 1)
        self.grid.addWidget(self.push, 2, 0, 2, 2, alignment=Qt.AlignCenter)

    def get_value(self):
        value = self.line.text()
        time = self.time.text()
        try:
            con = sqlite3.connect('notes.sqlite')
            cur = con.cursor()
            name = self.parent.comboBox.currentText()
            data = self.parent.label_2.text()
            data = data[-10:]
            id = cur.execute("""SELECT id FROM users WHERE name = ?""", (name,)).fetchall()
            t = cur.execute("""SELECT time FROM note WHERE user = ? AND data = ? AND time = ?""", (id[0][0], data, time)).fetchall()
            if len(t) > 0:
                raise NewException
            if ',' in value and value.count(',') == 1:
                m = value.find(',')
                value = value[:m] + '.' + value[m + 1:]
            value = float(value)
            if value <= 0 or value > 55.5:
                raise Exception
            value = str(value)
            self.parent.save(time, value)
            self.close()
        except NewException:
            msgBox = QMessageBox()
            msgBox.setIcon(QMessageBox.Information)
            msgBox.setWindowTitle("Ошибка")
            msgBox.addButton('ок', QMessageBox.AcceptRole)
            msgBox.setText("Запись на это время уже существует. Пожалуйста измените время"
                           "или очистите день и внесите данные снова")
            msgBox.exec_()
        except Exception:
            msgBox = QMessageBox()
            msgBox.setIcon(QMessageBox.Information)
            msgBox.setWindowTitle("Ошибка")
            msgBox.addButton('ок', QMessageBox.AcceptRole)
            msgBox.setText("Вы некорректно ввели значение. "
                           "Значение должно быть десятичным числом меньшим 55.5 "
                           "и большим 0.0 (Так как значений меньше 0.0 и больше "
                           "55.5 у живого человека быть не может.). Введите другое значение.")
            msgBox.exec_()
python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    S. Nick
    2022-01-08T06:32:31Z2022-01-08T06:32:31Z

    void QGridLayout::setRowStretch(int row, int stretch)

    设置stretch字符串拉伸因子row。第一行是数字 0。拉伸因子是指此网格中的其他行。具有较高拉伸因子的行占用更多可用空间。

    默认拉伸因子为 0。如果拉伸因子为 0,并且该表中的其他行根本无法增长,则该行仍然可以增长。

    void QGridLayout::setColumnStretch(int column, int stretch)

    stretch设置列的拉伸因子column。第一列是数字 0。

    拉伸因子相对于该网格中的其他列。具有较高拉伸因子的列会占用更多可用空间。

    默认拉伸因子为 0。如果拉伸因子为 0,并且该表中的其他列根本无法增长,则该列可以增长。

    import sys
    from PyQt5 import QtWidgets, QtCore, QtGui
    from PyQt5.Qt import *
    
    
    class Ui_Append(object):
        def setupUi(self, AppendWindow):
            AppendWindow.resize(500, 250)
            self.centralwidget = QtWidgets.QWidget(AppendWindow)
            self.centralwidget.setObjectName("centralwidget")
    
            self.time = QtWidgets.QTimeEdit(self.centralwidget)
            self.time.setGeometry(QtCore.QRect(50, 85, 170, 40))
            self.time.setObjectName("timeEditWidget")
            font = QtGui.QFont('Times new roman', 16)
            font.setBold(True)
            self.time.setFont(font)
            self.time.setMinimumWidth(170)
    
            self.lable_1 = QtWidgets.QLabel(self.centralwidget)
            self.lable_1.setGeometry(QtCore.QRect(50, 40, 170, 40))
            self.lable_1.setObjectName("lable_1Widget")
            font = QtGui.QFont('Times new roman', 16)
            font.setBold(True)
            self.lable_1.setFont(font)
            self.lable_1.setText('Выберите время')
            self.lable_1.setMinimumWidth(170)
    
            self.line = QtWidgets.QLineEdit(self.centralwidget)
            self.line.setGeometry(QtCore.QRect(280, 85, 170, 40))
            self.line.setObjectName("lineEditWidget")
            font = QtGui.QFont('Times new roman', 16)
            font.setBold(True)
            self.line.setFont(font)
            self.line.setMinimumWidth(170)
    
            self.lable_2 = QtWidgets.QLabel(self.centralwidget)
            self.lable_2.setGeometry(QtCore.QRect(280, 40, 170, 40))
            self.lable_2.setObjectName("lable_2Widget")
            font = QtGui.QFont('Times new roman', 16)
            font.setBold(True)
            self.lable_2.setFont(font)
            self.lable_2.setText('Введите значение')
            self.lable_2.setMinimumWidth(170)
    
            self.push = QtWidgets.QPushButton(self.centralwidget)
            self.push.setGeometry(QtCore.QRect(160, 160, 180, 40))
            font = QtGui.QFont('Times new roman', 16)
            font.setBold(True)
            self.push.setFont(font)
            self.push.setText('Подтвердить')
            self.push.setMinimumWidth(180)
    
            AppendWindow.setCentralWidget(self.centralwidget)
    
    
    class AppendWindow(QMainWindow, Ui_Append):
        def __init__(self, parent=None):
            super(AppendWindow, self).__init__(parent)                          # ??? parent
            self.parent = parent
    
            self.setupUi(self)
            self.setWindowTitle('Новая запись')
    
            self.push.clicked.connect(self.get_value)
    
            self.grid = QtWidgets.QGridLayout(self.centralwidget)
            self.grid.setContentsMargins(20, 20, 20, 20)
            self.grid.setHorizontalSpacing(20)
            self.grid.setVerticalSpacing(20)
            self.grid.setRowStretch(0, 1)                                        #  +++ 1
            self.grid.setRowStretch(1, 1)
            self.grid.setRowStretch(2, 1)                                        #  +++ 
            self.grid.setRowStretch(3, 1)                                        #  +++ 
            
            self.grid.setColumnStretch(0, 1)                                     #  +++ 
            self.grid.setColumnStretch(1, 1)                                     #  +++
    
            self.grid.addWidget(self.lable_1, 0, 0)
            self.grid.addWidget(self.lable_2, 0, 1)
            self.grid.addWidget(self.time, 1, 0)
            self.grid.addWidget(self.line, 1, 1, 1, 1)
            self.grid.addWidget(self.push, 2, 0, 2, 2, alignment=Qt.AlignCenter)
    
        def get_value(self):
            value = self.line.text()
            time = self.time.text()
            try:
                con = sqlite3.connect('notes.sqlite')
                cur = con.cursor()
                name = self.parent.comboBox.currentText()
                data = self.parent.label_2.text()
                data = data[-10:]
                id = cur.execute("""SELECT id FROM users WHERE name = ?""", (name,)).fetchall()
                t = cur.execute("""SELECT time FROM note WHERE user = ? AND data = ? AND time = ?""", (id[0][0], data, time)).fetchall()
                if len(t) > 0:
                    raise NewException
                if ',' in value and value.count(',') == 1:
                    m = value.find(',')
                    value = value[:m] + '.' + value[m + 1:]
                value = float(value)
                if value <= 0 or value > 55.5:
                    raise Exception
                value = str(value)
                self.parent.save(time, value)
                self.close()
            except NewException:
                msgBox = QMessageBox()
                msgBox.setIcon(QMessageBox.Information)
                msgBox.setWindowTitle("Ошибка")
                msgBox.addButton('ок', QMessageBox.AcceptRole)
                msgBox.setText("Запись на это время уже существует. Пожалуйста измените время"
                               "или очистите день и внесите данные снова")
                msgBox.exec_()
            except Exception:
                msgBox = QMessageBox()
                msgBox.setIcon(QMessageBox.Information)
                msgBox.setWindowTitle("Ошибка")
                msgBox.addButton('ок', QMessageBox.AcceptRole)
                msgBox.setText("Вы некорректно ввели значение. "
                               "Значение должно быть десятичным числом меньшим 55.5 "
                               "и большим 0.0 (Так как значений меньше 0.0 и больше "
                               "55.5 у живого человека быть не может.). Введите другое значение.")
                msgBox.exec_()
                
    
    if __name__ == "__main__":
        app = QApplication(sys.argv)
        w = AppendWindow()
        w.show()
        sys.exit(app.exec_())            
    

    在此处输入图像描述

    • 1

相关问题

  • 是否可以以某种方式自定义 QTabWidget?

  • telebot.anihelper.ApiException 错误

  • Python。检查一个数字是否是 3 的幂。输出 无

  • 解析多个响应

  • 交换两个数组的元素,以便它们的新内容也反转

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    表格填充不起作用

    • 2 个回答
  • Marko Smith

    提示 50/50,有两个,其中一个是正确的

    • 1 个回答
  • Marko Smith

    在 PyQt5 中停止进程

    • 1 个回答
  • Marko Smith

    我的脚本不工作

    • 1 个回答
  • Marko Smith

    在文本文件中写入和读取列表

    • 2 个回答
  • Marko Smith

    如何像屏幕截图中那样并排排列这些块?

    • 1 个回答
  • Marko Smith

    确定文本文件中每一行的字符数

    • 2 个回答
  • Marko Smith

    将接口对象传递给 JAVA 构造函数

    • 1 个回答
  • Marko Smith

    正确更新数据库中的数据

    • 1 个回答
  • Marko Smith

    Python解析不是css

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5