【项目亲测有效】【PyQt5】解决打包exe文件后,窗口中文字大小跟随分辨率变化,及控件移位问题;

使用pyqt5设计窗口打包成exe文件后,在其它电脑运行时,出现文字大小会跟随当前机器分辨率变化,以及窗口中控件移位,与本地调试时不一致;

控件移位

字体大小变样

解决方法:

1、在窗口设置中设置窗口的固定大小 ;

main_window.setFixedSize(1116, 601)  # 设置窗口的固定大小为1116X601 像素

    def retranslateUi(self, main_window):
        _translate = QtCore.QCoreApplication.translate
        main_window.setWindowIcon(QtGui.QIcon('window_logo.ico')) 
        main_window.setFixedSize(1116, 601)  # 设置窗口的固定大小为1116X601 像素
        main_window.setWindowTitle(_translate("main_window", "接口监测系统")) 
        self.login_logo.setText(_translate("main_window", "TextLabel"))
        self.login_title.setText(_translate("main_window", "接 口 监 测 系 统"))
        self.login_button.setText(_translate("main_window", "登  录"))
        self.new_user.setText(_translate("main_window", "账号注册"))
        self.contact_admin.setText(_translate("main_window", "联系管理员"))
        self.background_logo.setText(_translate("main_window", "TextLabel"))

2、在对应的控件设计中,设置固定字体的像素大小;

font.setPixelSize(34) # 固定字体像素大小,控制分辨率变化

        self.login_title = QtWidgets.QLabel(self.login_frame)
        self.login_title.setGeometry(QtCore.QRect(50, 130, 281, 51))
        font = QtGui.QFont(font_family)
        # font.setPointSize(36) # 正常设定字体大小
        font.setPixelSize(34) # 固定字体像素大小,控制分辨率变化
        font.setBold(True)
        font.setItalic(False)
        font.setWeight(75)
        font.setStrikeOut(False)
        font.setStyleStrategy(QtGui.QFont.PreferAntialias)
        self.login_title.setFont(font)
        self.login_title.setStyleSheet("color: rgb(0, 0, 127);
        self.login_title.setObjectName("login_title")

注意:代码中font = QtGui.QFont(font_family)应用了其它字体资源文件,如果代码中有引用到其它字体文件时,在打包exe文件时,记得把字体的资源文件一并打包。若你使用的字体在运行机器中没有的话,则会用运行机器本级默认的字体,所以不同的字体在不同的电脑中展示不同。

3、设置后,重新打包,则会正常展示,当分辨率改变时,窗口内容也不会有变化;

4、如果不行可以尝试直接在程序的入口添加QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)

设置字体大小自适应分辨率

if __name__ == "__main__":
    QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
    app = QApplication(sys.argv)
    MainWin = Login_Window()   
    MainWin.show() 
    sys.exit(app.exec_()) 

或在UI页面元素文件中设置DPI固定值

        QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
        QApplication.setAttribute(Qt.AA_Use96Dpi) # 设置DPI为固定值96

有疑问欢迎评论留意!!

亲测有效,制作不易,你的点赞是小菜更新的动力,点个赞加个关注吧~

关注我,分享更多项目实际案例问题,帮您解决更多问题,少走弯路!!

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5,想要实现跟随窗口大小变化,可以使用QWidget的resizeEvent事件。resizeEvent会在窗口大小变化时被触发。 首先,需要在窗口的构造函数或初始化函数件设置一个初始位置和大小。然后,通过重写QWidget的resizeEvent方法,实现件随窗口变化而调整。 以下是实现的思路和示例代码: 1. 选择一个合适的初始位置和大小,比如通过设置件的初始x、y坐标和宽高。 2. 在窗口的构造函数或初始化函数创建件,并设置初始位置和大小。 3. 在件所属的窗口重写resizeEvent方法。 4. 在resizeEvent方法获取窗口的新大小,并根据需要进行计算件的新位置和大小。 5. 使用件的setGeometry方法,设置件的新位置和大小。 下面是一个简单的示例代码: ```python import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QLabel class MyWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("跟随窗口大小变化示例") self.setGeometry(100, 100, 500, 300) # 设置窗口初始位置和大小 # 创建一个标签件,并设置初始位置和大小 self.label = QLabel("这是一个标签", self) self.label.setGeometry(10, 10, 100, 30) def resizeEvent(self, event): # 获取窗口的新大小 window_size = event.size() # 设置件的新位置和大小 self.label.setGeometry(10, 10, window_size.width() - 20, 30) if __name__ == '__main__': app = QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_()) ``` 在这个示例,创建了一个窗口和一个标签件。窗口的resizeEvent方法通过计算新的窗口大小调整了标签件的位置和大小,使其始终保持在窗口的左上角。当窗口大小变化时,标签件会自动跟随变化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值