简体   繁体   English

如何使用Python,PyQt5和Pyinstaller修复无法正确显示的按钮

[英]How to fix buttons not showing properly using Python, PyQt5, and Pyinstaller

I created an interface using Qt Designer and integrated it into my python code using PyQt5. 我使用Qt Designer创建了一个接口,并使用PyQt5将其集成到了我的python代码中。 I then created an exe file using Pyinstaller and the interface shows up fine on my laptop using Windows 10 Home. 然后,我使用Pyinstaller创建了一个exe文件,并且使用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. 但是,在使用Windows 10 Pro的其他Windows计算机上进行的测试显示按钮和标签全部被切出,使用错误的字体,并且如下所示。 For example, the top title should be GEODISTANCE CALCULATOR' but only shows 'GEODISTANCE CA'. 例如,最上面的标题应该是“ GEODISTANCE CALCULATOR”,而仅显示“ 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_())

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': 从Qt Designer派生的ui文件的完整代码如下所示,可以通过将代码复制并粘贴到文本编辑器并将文件另存为'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_())

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM