QMainWindow控件与窗口等比缩放

#!python3
import os
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QAction, QTextBrowser, QTableWidget, QAbstractItemView, QTableWidgetItem, \
    QMessageBox, QHeaderView, QDesktopWidget,QApplication


class MainWindow(QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        # self.resize(800, 500)
        self.init_window_size()
        self.init_widgets()
        self.lay_widgets()
        # 初始化进度显示窗口

    def init_window_size(self):
        scale = 0.75
        desktop = QApplication.desktop()
        win_width = int(desktop.width() * scale)
        win_height = int(desktop.height() * scale)
        self.resize(win_width, win_height)
        self.center()
        pass

    def center(self):
        screen = QDesktopWidget().screenGeometry()
        coord_x = int((screen.width() - self.geometry().width()) * 0.5)
        coord_y = int((screen.height() - self.geometry().height()) * 0.5)
        self.move(coord_x, coord_y)
        pass

    def init_menu_bar(self):
        self.menu_bar = self.menuBar()
        #
        self.action_config = QAction('配置', self)
        self.menu_bar.addAction(self.action_config)
        #

        def show_help_information():
            message = "当前版本"
            QMessageBox.information(self, '使用说明', message)
            pass

        self.help_infomation = QAction('关于', self)
        self.menu_bar.addAction(self.help_infomation)
        self.help_infomation.triggered.connect(show_help_information)
        #
    def init_widgets(self):
        self.init_menu_bar()
        self.init_text_browser_display()
        self.init_progress_table()

    def lay_widgets(self):
        self.centralwidget = QtWidgets.QWidget()
        #
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.addWidget(self.text_browser)
        self.horizontalLayout.addWidget(self.progress_table)
        self.horizontalLayout.setStretch(0, 3)
        self.horizontalLayout.setStretch(1, 2)

        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.addLayout(self.horizontalLayout, 0, 0, 1, 1)
        #
        self.setCentralWidget(self.centralwidget)
        pass

    # def lay_widgets1(self):
    #     self.lay_text_browser()
    #     self.lay_progress_table()

    def init_text_browser_display(self):
        self.text_browser = QTextBrowser(self)
        # self.text_browser.setGeometry(QtCore.QRect(10, 30, 780, 460))

    def lay_text_browser(self):
        self.text_browser.setGeometry(QtCore.QRect(10, 30, 490, 460))

    def put_to_display(self, info):
        self.text_browser.append(moment(1) + info + '\n')
        self.cursor = self.text_browser.textCursor()
        self.text_browser.moveCursor(self.cursor.End)

    def init_progress_table(self):
        self.progress_table = QTableWidget(self)
        # 设置不可编辑,设置行选中
        self.progress_table.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.progress_table.setSelectionBehavior(QAbstractItemView.SelectRows)
        # 设置自动调整列宽
        self.progress_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        #
        self.progress_table.setColumnCount(2)
        self.progress_table.setHorizontalHeaderLabels(['地址', '进度'])

    def lay_progress_table(self):
        self.progress_table.setGeometry(QtCore.QRect(501, 30, 300, 460))

    def stipulate_dev_ip(self, ip_list):
        self.ip_list = ip_list
        total_rows = len(self.ip_list)
        self.progress_table.setRowCount(total_rows)
        #
        row = 0
        for ip in self.ip_list:
            adjust_res = ip
            description = '_'.join(list(map(str, adjust_res)))
            self.progress_table.setItem(row, 0, QTableWidgetItem(description))
            self.progress_table.setItem(row, 1, QTableWidgetItem('0%'))
            row += 1
            self.progress_table.viewport().update()
            pass
        pass

    def set_value(self, desc, progress):
        items = self.progress_table.findItems(desc, QtCore.Qt.MatchExactly)
        if items:
            res_row = items[0].row()
            self.progress_table.setItem(res_row, 1, QTableWidgetItem(progress))
            pass
        self.progress_table.viewport().update()
        pass

    def closeEvent(self, event):
        """
        对MainWindow的函数closeEvent进行重构
        退出软件时结束所有进程
        :param event:
        :return:
        """
        reply = QMessageBox.question(self, '提示', '是否要退出程序?',
                                     QMessageBox.Yes | QMessageBox.No,
                                     QMessageBox.No)
        if reply == QMessageBox.Yes:
            event.accept()
            os._exit(0)
        else:
            event.ignore()
            pass
        pass


if __name__ == '__main__':
    import sys
    from PyQt5.QtWidgets import QApplication

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现Qt窗口的等比缩放,可以通过重写窗口的resizeEvent()事件来实现。在resizeEvent()函数中,可以根据窗口的大小调整窗口内部的控件尺寸,以保持它们的比例不变。 下面是一个简单的示例代码,演示了如何实现等比缩放窗口: ```cpp #include <QMainWindow> #include <QResizeEvent> class MyMainWindow : public QMainWindow { public: explicit MyMainWindow(QWidget *parent = nullptr) : QMainWindow(parent) { // 设置窗口大小策略为可调整大小 setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); } protected: void resizeEvent(QResizeEvent *event) override { // 获取窗口的新大小 QSize newSize = event->size(); // 计算缩放比例(取宽高中较小的一边作为基准) int scale = qMin(newSize.width() / m_initialSize.width(), newSize.height() / m_initialSize.height()); // 根据缩放比例调整控件尺寸 // 这里以一个QPushButton为例,你可以根据实际情况调整其他控件 m_button->setFixedSize(m_initialButtonSize * scale); } private: QSize m_initialSize = QSize(800, 600); // 初始窗口大小 QSize m_initialButtonSize = QSize(100, 50); // 初始按钮大小 QPushButton *m_button; // 示例按钮 }; ``` 在这个示例中,我们重写了resizeEvent()函数,并在函数内根据窗口的新大小计算缩放比例。然后,我们根据缩放比例调整了一个QPushButton控件的尺寸,你可以根据实际情况调整其他控件。 请注意,这只是一个简单的示例,你可能需要根据实际需求进行适当的修改和扩展。希望能对你有所帮助!如果还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值