PyQt(1)

初次尝试学习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)

此时信号传递成功。

猜你喜欢

转载自blog.csdn.net/oury_fln/article/details/86299729