如何使用 Python、PyQt5 和 Pyinstaller 修复未正确显示的按钮 [英] How to fix buttons not showing properly using Python, PyQt5, and Pyinstaller

查看:42
本文介绍了如何使用 Python、PyQt5 和 Pyinstaller 修复未正确显示的按钮的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用 Qt Designer 创建了一个界面,并使用 PyQt5 将其集成到我的 Python 代码中.然后我使用 Pyinstaller 创建了一个 exe 文件,并且使用 Windows 10 Home 的笔记本电脑上的界面显示良好.然而,在使用 Windows 10 Pro 的不同 Windows 机器上进行测试显示按钮和标签全部被剪掉,字体错误,如下所示.例如,顶部标题应为 GEODISTANCE CALCULATOR,但仅显示GEODISTANCE CA".是什么导致这种不兼容,我该如何解决?

I created an interface using Qt Designer and integrated it into my python code using PyQt5. I then created an exe file using Pyinstaller and the interface shows up fine on my laptop using Windows 10 Home. However testing on a different windows machine using Windows 10 Pro shows the buttons and labels all cut out , with wrong font and all as shown below. For example, the top title should be GEODISTANCE CALCULATOR' but only shows 'GEODISTANCE CA'. What causes this incompatibility and how can I fix this?

我有下面的示例代码供任何想要测试样本的人使用:

I have the example code below for anyone who would like a sample to test on:

from PyQt5 import uic, QtWidgets
import sys

app = QtWidgets.QApplication(sys.argv)

window = uic.loadUi('interface.ui')
window.show()

sys.exit(app.exec_())

从Qt Designer派生的ui文件的完整代码如下所示,可以通过将代码复制粘贴到文本编辑器并将文件保存为'interface.ui'来重新创建该文件:

The complete code for the ui file derived from Qt Designer is as shown below and the file can be recreated by copying and pasting the code to a text editor and saving the file as 'interface.ui':

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>745</width>
    <height>534</height>
   </rect>
  </property>
  <property name="font">
   <font>
    <pointsize>28</pointsize>
    <weight>75</weight>
    <bold>true</bold>
   </font>
  </property>
  <property name="windowTitle">
   <string>GEODISTANCE PRO</string>
  </property>
  <property name="styleSheet">
   <string notr="true">QMainWindow{
background-color: rgb(25, 31, 63);
}</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>-70</x>
      <y>10</y>
      <width>811</width>
      <height>231</height>
     </rect>
    </property>
    <property name="styleSheet">
     <string notr="true">background-image: url(:/newPrefix/shutterstock-488566735.png);</string>
    </property>
    <property name="text">
     <string/>
    </property>
   </widget>
   <widget class="QLabel" name="label_2">
    <property name="geometry">
     <rect>
      <x>70</x>
      <y>120</y>
      <width>601</width>
      <height>71</height>
     </rect>
    </property>
    <property name="palette">
     <palette>
      <active>
       <colorrole role="WindowText">
        <brush brushstyle="SolidPattern">
         <color alpha="255">
          <red>255</red>
          <green>255</green>
          <blue>255</blue>
         </color>
        </brush>
       </colorrole>
       <colorrole role="Text">
        <brush brushstyle="SolidPattern">
         <color alpha="255">
          <red>255</red>
          <green>255</green>
          <blue>255</blue>
         </color>
        </brush>
       </colorrole>
       <colorrole role="ButtonText">
        <brush brushstyle="SolidPattern">
         <color alpha="255">
          <red>255</red>
          <green>255</green>
          <blue>255</blue>
         </color>
        </brush>
       </colorrole>
      </active>
      <inactive>
       <colorrole role="WindowText">
        <brush brushstyle="SolidPattern">
         <color alpha="255">
          <red>255</red>
          <green>255</green>
          <blue>255</blue>
         </color>
        </brush>
       </colorrole>
       <colorrole role="Text">
        <brush brushstyle="SolidPattern">
         <color alpha="255">
          <red>255</red>
          <green>255</green>
          <blue>255</blue>
         </color>
        </brush>
       </colorrole>
       <colorrole role="ButtonText">
        <brush brushstyle="SolidPattern">
         <color alpha="255">
          <red>255</red>
          <green>255</green>
          <blue>255</blue>
         </color>
        </brush>
       </colorrole>
      </inactive>
      <disabled>
       <colorrole role="WindowText">
        <brush brushstyle="SolidPattern">
         <color alpha="255">
          <red>120</red>
          <green>120</green>
          <blue>120</blue>
         </color>
        </brush>
       </colorrole>
       <colorrole role="Text">
        <brush brushstyle="SolidPattern">
         <color alpha="255">
          <red>120</red>
          <green>120</green>
          <blue>120</blue>
         </color>
        </brush>
       </colorrole>
       <colorrole role="ButtonText">
        <brush brushstyle="SolidPattern">
         <color alpha="255">
          <red>120</red>
          <green>120</green>
          <blue>120</blue>
         </color>
        </brush>
       </colorrole>
      </disabled>
     </palette>
    </property>
    <property name="font">
     <font>
      <family>RomanC</family>
      <pointsize>28</pointsize>
      <weight>50</weight>
      <bold>false</bold>
     </font>
    </property>
    <property name="autoFillBackground">
     <bool>false</bool>
    </property>
    <property name="text">
     <string>GEODISTANCE CALCULATOR</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_4">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>270</y>
      <width>181</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>12</pointsize>
      <weight>75</weight>
      <bold>true</bold>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">color: rgb(255, 255, 255);</string>
    </property>
    <property name="text">
     <string>  STARTING SUBURB</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="lineEdit">
    <property name="geometry">
     <rect>
      <x>210</x>
      <y>270</y>
      <width>301</width>
      <height>41</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
      <weight>75</weight>
      <bold>true</bold>
     </font>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
      <x>520</x>
      <y>430</y>
      <width>141</width>
      <height>61</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>11</pointsize>
      <weight>75</weight>
      <bold>true</bold>
     </font>
    </property>
    <property name="cursor">
     <cursorShape>PointingHandCursor</cursorShape>
    </property>
    <property name="text">
     <string>ENTER</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_5">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>340</y>
      <width>181</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>12</pointsize>
      <weight>75</weight>
      <bold>true</bold>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">color: rgb(255, 255, 255);</string>
    </property>
    <property name="text">
     <string>      FARE PER KM</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_6">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>450</y>
      <width>181</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>12</pointsize>
      <weight>75</weight>
      <bold>true</bold>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">color: rgb(255, 255, 255);</string>
    </property>
    <property name="text">
     <string>     GOVT LEVY ($)</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_7">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>390</y>
      <width>171</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>12</pointsize>
      <weight>75</weight>
      <bold>true</bold>
     </font>
    </property>
    <property name="styleSheet">
     <string notr="true">color: rgb(255, 255, 255);
</string>
    </property>
    <property name="text">
     <string>       DISCOUNT</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="lineEdit_2">
    <property name="geometry">
     <rect>
      <x>210</x>
      <y>330</y>
      <width>111</width>
      <height>41</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>12</pointsize>
      <weight>75</weight>
      <bold>true</bold>
     </font>
    </property>
   </widget>
   <widget class="QLineEdit" name="lineEdit_3">
    <property name="geometry">
     <rect>
      <x>210</x>
      <y>380</y>
      <width>111</width>
      <height>41</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>12</pointsize>
      <weight>75</weight>
      <bold>true</bold>
     </font>
    </property>
   </widget>
   <widget class="QLineEdit" name="lineEdit_4">
    <property name="geometry">
     <rect>
      <x>210</x>
      <y>440</y>
      <width>111</width>
      <height>41</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>12</pointsize>
      <weight>75</weight>
      <bold>true</bold>
     </font>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>745</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources>
  <include location="adelaide.qrc"/>
  <include location="filex.qrc"/>
 </resources>
 <connections/>
</ui>

推荐答案

通过添加如下所示的多行代码解决了这个问题.有人已经发布了这个答案,但他们删除了它,可能认为它是错误的,因为我花了一段时间才将结果回复给他们,所以谢谢!

This issue is solved by adding a few more lines of code as shown below. Someone already posted this answer but they deleted it probably thinking its wrong as it took me a while to get back to them with the results, so thank you!

from PyQt5 import uic, QtWidgets
import sys

# Enable high DPI scaling
if hasattr(QtCore.Qt, 'AA_EnableHighDpiScaling'):
    PyQt5.QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling, True)

if hasattr(QtCore.Qt, 'AA_UseHighDpiPixmaps'):
    PyQt5.QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_UseHighDpiPixmaps, True)
app = QtWidgets.QApplication(sys.argv)

window = uic.loadUi('interface.ui')
window.show()

sys.exit(app.exec_())

这篇关于如何使用 Python、PyQt5 和 Pyinstaller 修复未正确显示的按钮的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆