Пользовательский интерфейс PyQt5 отображается неправильно при запуске из PyCharm (MacOS, Python 3.7.7) - PullRequest
0 голосов
/ 22 марта 2020
MacOS Mojave (10.14.5 (18F132))
Python 3.7.7 (default, Mar 10 2020, 15:43:03)
[Clang 11.0.0 (clang-1100.0.33.17)] on darwin
PyQt version: 5.14.1
PyCharm 2019.1.3 (Community Edition)
Build #PC-191.7479.30, built on May 29, 2019
JRE: 11.0.2+9-b159.60 x86_64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o

Я сгенерировал пользовательский интерфейс с помощью QtDesigner (UI_LaserExpose.ui - см. Код внизу поста), и я получаю желаемый вид при запуске с терминала bash (python3 qt_test.py - см. Код на внизу поста):

Пользовательский интерфейс, выполняющий qt_test.py с терминала MacOS (bash)

Однако, если я запускаю тот же скрипт (qt_test.py) из PyCharm, получая доступ к тому же интерпретатору Python, не используя виртуальную среду и полагаясь на ту же установку PyQt5, я получаю следующее:

пользовательский интерфейс, полученный при запуске qt_test.py изнутри PyCharm

Не знаете, почему я получаю разные результаты из PyCharm?

Некоторые вещи, которые я уже сделал:

  • Удаление всех Python версий и переустановка только той, которую я использую сейчас.
  • Удаление всех папок библиотеки и переустановка только тех папок, которые я сейчас использую.

Вот установленные на данный момент библиотеки:

  • PyQt5 5.14.1
  • PyQt5-sip 12.7.1
  • PyYAML 5.3.1
  • future 0.18.2
  • iso8601 0.1.12
  • pip 20.0.2
  • pyserial 3.4 3.4
  • setuptools 46.0.0
  • wheel 0.34.2

Любые указатели относительно того, что вызывает Буду признателен за порчу макета из PyCharm!

Спасибо!

UI_LaserExpose.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>471</width>
    <height>301</height>
   </rect>
  </property>
  <property name="minimumSize">
   <size>
    <width>5</width>
    <height>0</height>
   </size>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QPushButton" name="up_button">
    <property name="geometry">
     <rect>
      <x>60</x>
      <y>130</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="text">
     <string>Y+</string>
    </property>
   </widget>
   <widget class="QPushButton" name="down_button">
    <property name="geometry">
     <rect>
      <x>60</x>
      <y>210</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="text">
     <string>Y-</string>
    </property>
   </widget>
   <widget class="QPushButton" name="motor_off_button">
    <property name="geometry">
     <rect>
      <x>60</x>
      <y>170</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>9</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Motor
Off</string>
    </property>
   </widget>
   <widget class="QPushButton" name="right_button">
    <property name="geometry">
     <rect>
      <x>100</x>
      <y>170</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="text">
     <string>X+</string>
    </property>
   </widget>
   <widget class="QPushButton" name="left_button">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>170</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="text">
     <string>X-</string>
    </property>
   </widget>
   <widget class="QComboBox" name="serial_port_combobox">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>30</y>
      <width>221</width>
      <height>26</height>
     </rect>
    </property>
   </widget>
   <widget class="QLabel" name="label">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>10</y>
      <width>81</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>Serial port</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_2">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>60</y>
      <width>81</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>Position</string>
    </property>
   </widget>
   <widget class="QLabel" name="posdisp_label">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>80</y>
      <width>221</width>
      <height>21</height>
     </rect>
    </property>
    <property name="styleSheet">
     <string notr="true">QLabel { background-color : #888888; color : #EEEE00; }</string>
    </property>
    <property name="text">
     <string>TextLabel</string>
    </property>
    <property name="alignment">
     <set>Qt::AlignCenter</set>
    </property>
   </widget>
   <widget class="QPushButton" name="zup_button">
    <property name="geometry">
     <rect>
      <x>160</x>
      <y>130</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="text">
     <string>Z+</string>
    </property>
   </widget>
   <widget class="QPushButton" name="zdown_button">
    <property name="geometry">
     <rect>
      <x>160</x>
      <y>210</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="text">
     <string>Z-</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_4">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>110</y>
      <width>121</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>Manual Controls</string>
    </property>
   </widget>
   <widget class="QProgressBar" name="progress_bar">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>270</y>
      <width>431</width>
      <height>23</height>
     </rect>
    </property>
    <property name="value">
     <number>24</number>
    </property>
   </widget>
   <widget class="QLabel" name="file_label">
    <property name="geometry">
     <rect>
      <x>20</x>
      <y>250</y>
      <width>461</width>
      <height>16</height>
     </rect>
    </property>
    <property name="text">
     <string>Elapsed: na / Remaining: na</string>
    </property>
   </widget>
   <widget class="QLabel" name="label_7">
    <property name="geometry">
     <rect>
      <x>340</x>
      <y>170</y>
      <width>31</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>vG0:</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="G0_speed_textbox">
    <property name="geometry">
     <rect>
      <x>380</x>
      <y>170</y>
      <width>71</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string/>
    </property>
   </widget>
   <widget class="QLabel" name="label_8">
    <property name="geometry">
     <rect>
      <x>340</x>
      <y>210</y>
      <width>31</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>vG1:</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="G1_speed_textbox">
    <property name="geometry">
     <rect>
      <x>380</x>
      <y>210</y>
      <width>71</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string/>
    </property>
   </widget>
   <widget class="QLineEdit" name="laser_power_textbox">
    <property name="geometry">
     <rect>
      <x>380</x>
      <y>130</y>
      <width>71</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string/>
    </property>
   </widget>
   <widget class="QLabel" name="label_9">
    <property name="geometry">
     <rect>
      <x>330</x>
      <y>130</y>
      <width>41</width>
      <height>21</height>
     </rect>
    </property>
    <property name="text">
     <string>Plaser</string>
    </property>
   </widget>
   <widget class="QComboBox" name="speed_combobox">
    <property name="geometry">
     <rect>
      <x>140</x>
      <y>170</y>
      <width>71</width>
      <height>31</height>
     </rect>
    </property>
   </widget>
   <widget class="QPushButton" name="spindle_on_button">
    <property name="geometry">
     <rect>
      <x>240</x>
      <y>130</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>9</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Laser
On</string>
    </property>
   </widget>
   <widget class="QPushButton" name="spindle_off_button">
    <property name="geometry">
     <rect>
      <x>280</x>
      <y>130</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>9</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Laser
Off</string>
    </property>
   </widget>
   <widget class="QPushButton" name="home_button">
    <property name="geometry">
     <rect>
      <x>280</x>
      <y>70</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>9</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Home
XYZ</string>
    </property>
   </widget>
   <widget class="QPushButton" name="xyzero_button">
    <property name="geometry">
     <rect>
      <x>320</x>
      <y>70</y>
      <width>31</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>9</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Set
Zero</string>
    </property>
   </widget>
   <widget class="QPushButton" name="goto_zzero_button">
    <property name="geometry">
     <rect>
      <x>280</x>
      <y>210</y>
      <width>31</width>
      <height>31</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>9</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Goto
Z0</string>
    </property>
   </widget>
   <widget class="QPushButton" name="goto_xyzero_button">
    <property name="geometry">
     <rect>
      <x>240</x>
      <y>210</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>9</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Goto
XY0</string>
    </property>
   </widget>
   <widget class="QPushButton" name="file_dialog_button">
    <property name="geometry">
     <rect>
      <x>280</x>
      <y>30</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>9</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Open
File</string>
    </property>
   </widget>
   <widget class="QPushButton" name="play_button">
    <property name="geometry">
     <rect>
      <x>320</x>
      <y>30</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>9</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Play</string>
    </property>
   </widget>
   <widget class="QPushButton" name="stop_button">
    <property name="geometry">
     <rect>
      <x>360</x>
      <y>30</y>
      <width>31</width>
      <height>32</height>
     </rect>
    </property>
    <property name="font">
     <font>
      <pointsize>9</pointsize>
     </font>
    </property>
    <property name="text">
     <string>Abort</string>
    </property>
   </widget>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

qt_test.py :

import sys
from PyQt5 import QtWidgets, uic

app = QtWidgets.QApplication(sys.argv)

window = uic.loadUi("UI_LaserExpose.ui")
window.show()

PyCharm:

QMacStyle

environ({'PATH': '/opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Applications/Wireshark.app/Contents/MacOS', 'PS1': '\\[\\033[36m\\]\\u\\[\\033[m\\]@\\[\\033[32m\\]\\h:\\[\\033[33;1m\\]\\w\\[\\033[m\\]$ ', 'PYDEVD_LOAD_VALUES_ASYNC': 'True', 'DISPLAY': '/private/tmp/com.apple.launchd.X7BAfqm27I/org.macosforge.xquartz:0', 'QT_AUTO_SCREEN_SCALE_FACTOR': '2', 'VERSIONER_PYTHON_VERSION': '2.7', 'LOGNAME': 'gfattinger', 'XPC_SERVICE_NAME': 'com.jetbrains.pycharm.13112', 'PWD': '/Users/gfattinger/Documents/Python/LaserExpose', 'PYCHARM_HOSTED': '1', 'PYTHONPATH': '/Users/gfattinger/Documents/Python/LaserExpose:/Applications/PyCharm CE.app/Contents/helpers/third_party/thriftpy:/Applications/PyCharm CE.app/Contents/helpers/pydev', 'SHELL': '/bin/bash', 'LSCOLORS': 'ExFxBxDxCxegedabagacad', 'PYTHONIOENCODING': 'UTF-8', 'VERSIONER_PYTHON_PREFER_32_BIT': 'no', 'USER': 'gfattinger', 'CLICOLOR': '1', 'IPYTHONENABLE': 'False', 'TMPDIR': '/var/folders/qr/hlmd4zz12552msptsfzdnyfh0000gn/T/', 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.WJj9owhNzD/Listeners', 'XPC_FLAGS': '0x0', 'PYTHONUNBUFFERED': '1', '__CF_USER_TEXT_ENCODING': '0x1F5:0x0:0x0', 'Apple_PubSub_Socket_Render': '/private/tmp/com.apple.launchd.2y4H29qPrI/Render', 'LC_CTYPE': 'en_US.UTF-8', 'HOME': '/Users/gfattinger', '__PYVENV_LAUNCHER__': '/usr/local/bin/python3'})

Bash:

environ({'TERM_PROGRAM': 'Apple_Terminal', 'SHELL': '/bin/bash', 'TERM': 'xterm-256color', 'CLICOLOR': '1', 'TMPDIR': '/var/folders/qr/hlmd4zz12552msptsfzdnyfh0000gn/T/', 'Apple_PubSub_Socket_Render': '/private/tmp/com.apple.launchd.2y4H29qPrI/Render', 'TERM_PROGRAM_VERSION': '421.2', 'TERM_SESSION_ID': 'C3A0B50C-04E2-4928-B4D2-BD13FF50D057', 'USER': 'gfattinger', 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.WJj9owhNzD/Listeners', 'LSCOLORS': 'ExFxBxDxCxegedabagacad', 'PATH': '/opt/local/bin:/opt/local/sbin:/usr/local/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/lib/python3.6/site-packages:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/X11/bin:/Applications/Wireshark.app/Contents/MacOS', 'PWD': '/Users/gfattinger/Documents/Python/LaserExpose', 'LANG': 'en_US.UTF-8', 'XPC_FLAGS': '0x0', 'PS1': '\\[\\033[36m\\]\\u\\[\\033[m\\]@\\[\\033[32m\\]\\h:\\[\\033[33;1m\\]\\w\\[\\033[m\\]$ ', 'XPC_SERVICE_NAME': '0', 'SHLVL': '1', 'HOME': '/Users/gfattinger', 'PYTHONPATH': '/Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/lib/python3.6/site-packages:', 'LOGNAME': 'gfattinger', 'DISPLAY': '/private/tmp/com.apple.launchd.X7BAfqm27I/org.macosforge.xquartz:0', '_': '/usr/local/bin/python3', 'OLDPWD': '/Users/gfattinger/Documents/Python', '__CF_USER_TEXT_ENCODING': '0x1F5:0x0:0x0', '__PYVENV_LAUNCHER__': '/usr/local/bin/python3', 'QT_AUTO_SCREEN_SCALE_FACTOR': '2'})

QMacStyle

Обновление:

На основе вопроса из @tbd я сравнил переменные среды и обнаружил, что мой bash все еще указывает на старую папку Python 3.6. После перезапуска bash этого больше не было, так как я уже отредактировал свой .bash_profile, но забыл перезапустить bash раньше.

В любом случае, о чудо, теперь рендеринг пользовательского интерфейса при запуске с bash был также облажался: - (.

Я копался в записи папки Python 3.6 и обнаружил, что этот, в зависимости от того, добавляю ли я его в переменную окружения PYTHONPATH, давайте переключим неправильный рендеринг включается и выключается с bash:

export PYTHONPATH="/usr/local/lib/python3.6/site-packages"
python3 qt_test.py 

... отображается правильно.

Но

export PYTHONPATH=""
python3 qt_test.py

или

export PYTHONPATH="/usr/local/lib/python3.7/site-packages"
python3 qt_test.py

... дает неверные результаты.

Похоже, что Python 3.6 работает, в то время как Python 3.7 не получается .... немного тупо сейчас ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...