初次尝试学习PyQt。之前做过MFC和java自带的图形界面,有一丢丢经验。
之前安装过Anaconda3,已有一些包,只需要引入PyQt包即可。具体配置转自:
https://blog.csdn.net/zjm12343/article/details/79707275
首先进入Anaconda promot(安装过程可以使用非官方源加速或者使用ss+Proxifier)
安装SIP:
pip install Sip
安装PyQt5:
pip install PyQt5
安装PyQt5 tools:
pip install PyQt5-tools
之后在 ./Anaconda3/Lib/site-packages/pyqt5-tools 目录下可找到 designer.exe 。
添加环境变量:
Name: QT_QPA_PLATFORM_PLUGIN_PATH
Value: D:\Python\Python36\Lib\site-packages\PyQt5\Qt\plugins
配置PyCharm:
1、打开PyCharm,执行快捷键ctrl+alt+s打开设置界面,输入tool,点开external tools,配置qtdesigner。
点击左上角的加号,作如下配置:
在Qt Designer的设置中,Program选择PyQt安装目录中 designer.exe 的路径
Work directory 使用变量 $FileDir$
2、设置“PyUIC” -- 这个主要是用来将 Qt界面 转换成 py代码
在PyUIC的设置中,其他的都差不多,Program 写入Python的地址,Parameters写入
-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
把上面的Python路径修改成自己的即可!
Work directory 使用变量 $FileDir$
接下来就可以在PyCharm中使用Qt Designer并自动将图形界面转换为代码了。
具体使用方法参考:
https://blog.csdn.net/zjm12343/article/details/79709414
由于每次重新生成代码都会把文件重写一遍,所以推荐将除界面外的所有内容(包括信号处理等)都加到外部文件。
信号处理参考:
https://blog.csdn.net/baidu_34045013/article/details/52132804
我在实际使用信号处理时遇到过一个问题:
由于对象初始化代码在A文件,我在B文件的类的__init(self)__中生成一个A的实例,并设置信号:
class initMW:
def __init__(self, widget):
self.ui = Ui_MainWindow()
self.ui.setupUi(widget)
self.ui.Button.clicked.connect(self.bc)
def bc(self):
print('pressed!')
self.ui.Slider.setSliderPosition(20)
此时信号没有响应。神奇的是在第5行加上注释之后,调试走到那里再继续,之后就可以了。怀疑(瞎猜)是窗口初始化是一个多线程工作,或者走到第5句的时候还没有初始化完,因此信号没有创造成功。经参考:
https://blog.csdn.net/u010255072/article/details/84794663
方案后,修改代码为:
class initMW:
def __init__(self, widget):
self.ui = Ui_MainWindow()
self.ui.setupUi(widget)
QTimer.singleShot(0, self.initEvents)
def initEvents(self):
self.ui.Button.clicked.connect(self.bc)
def bc(self):
print('pressed!')
self.ui.Slider.setSliderPosition(20)
此时信号传递成功。