用Python3+PyQt5编写程序时,给按钮绑定自己写的函数时,函数中的一部分代码报错详细请参考下面代码:
import sys
import threading
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QHBoxLayout, QWidget
import conn_com
from configparser import ConfigParser
class MainWind(QMainWindow):
def __init__(self,parent=None):
super(MainWind,self).__init__(parent)
self.setWindowTitle("Test")
self.resize(714, 443)
self.button1=QPushButton("Test")
self.button1.clicked.connect(self.on_Click)
layout = QHBoxLayout()
layout.addWidget(self.button1)
mainFrame = QWidget()
mainFrame.setLayout(layout)
self.setCentralWidget(mainFrame)
def con_port(self):
conn_com.Communication.__name__("/dev/ttys0", 115200, timeout=0.5)
conn_com.Communication.Open_Port()
conn_com.Communication.Print_Port()
def Open_led(self):
conf = ConfigParser()
conf.read('settings/port_date.ini')
opd = conf['date']['openLED']
print(opd)
return opd
# conn_com.Communication.Send_data(opd)
def on_Click(self,conf):
self.sender()
if __name__ == '__main__':
conf
print("sss")
t3 = threading.Thread(target=self.Open_led, args=('t3',))
t3.start()
MainWind.instance()
if __name__=='__main__':
app=QApplication(sys.argv)
main=MainWind()
main.show()
sys.exit(app.exec_())
报错结果如下:
E:\Python_test\AutoTest_Tools\Scripts\python.exe "D:\Program Files\JetBrains\PyCharm Community Edition 2020.3.2\plugins\python-ce\helpers\pydev\pydevd.py" --multiproc --qt-support=auto --client 127.0.0.1 --port 59444 --file E:/AutoTest_Tools/qt/QWind.py
Connected to pydev debugger (build 211.7628.24)
sss
python-BaseException
python-BaseException
Traceback (most recent call last):
File "D:\Python\lib\threading.py", line 865, in run
Traceback (most recent call last):
File "E:/AutoTest_Tools/qt/QWind.py", line 40, in on_Click
MainWind.instance()
AttributeError: type object 'MainWind' has no attribute 'instance'
self._target(*self._args, **self._kwargs)
TypeError: Open_led() takes 1 positional argument but 2 were given
我以为是线程冲突的问题,开了一个新线程,但好像也不行。
正确的结果是触发按钮后,控制台会打印出从ini文件中读出来的内容才对,但现在没有,只有Print打印出来的三个S,能帮忙看看问题出在哪了,谢谢!