PyQT5 中的信号/插槽不起作用,因为数组对功能不可见



我有 3 个文件:Gui.py、IPG_weld.py Reading.py

Gui.py 是:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMainWindow
from PyQt5.QtGui import QIcon
from PyQt5 import QtGui
from Ipg_weld import Ui_IPG_weld

class Test(Ui_IPG_weld):
def __init__(self):
super().__init__()
self.widget = QMainWindow()
self.setupUi(self.widget)
...
self.widget.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
main = Test()
sys.exit(app.exec_())

Ipg_Weld.py是:

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'D:IPG_Weldipg_weld.ui'
#
# Created by: PyQt5 UI code generator 5.9
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
from Reading import reading
class Ui_IPG_weld(object):
def setupUi(self, IPG_weld):
IPG_weld.setObjectName("IPG_weld")
IPG_weld.resize(1107, 641)
self.centralWidget = QtWidgets.QWidget(IPG_weld)
self.centralWidget.setObjectName("centralWidget")
self.Savebutton = QtWidgets.QPushButton(self.centralWidget)
self.Savebutton.setGeometry(QtCore.QRect(930, 520, 131, 51))
self.Savebutton.setObjectName("Savebutton")
self.label = QtWidgets.QLabel(self.centralWidget)
self.label.setGeometry(QtCore.QRect(20, 20, 121, 31))
font = QtGui.QFont()
font.setPointSize(14)
self.label.setFont(font)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralWidget)
self.label_2.setGeometry(QtCore.QRect(400, 20, 121, 31))
font = QtGui.QFont()
font.setPointSize(14)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralWidget)
self.label_3.setGeometry(QtCore.QRect(20, 80, 55, 16))
self.label_3.setObjectName("label_3")
self.label_4 = QtWidgets.QLabel(self.centralWidget)
self.label_4.setGeometry(QtCore.QRect(20, 120, 55, 16))
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(self.centralWidget)
self.label_5.setGeometry(QtCore.QRect(20, 160, 55, 16))
self.label_5.setObjectName("label_5")
self.label_6 = QtWidgets.QLabel(self.centralWidget)
self.label_6.setGeometry(QtCore.QRect(400, 90, 55, 16))
self.label_6.setObjectName("label_6")
self.label_7 = QtWidgets.QLabel(self.centralWidget)
self.label_7.setGeometry(QtCore.QRect(400, 130, 55, 16))
self.label_7.setObjectName("label_7")
self.label_8 = QtWidgets.QLabel(self.centralWidget)
self.label_8.setGeometry(QtCore.QRect(400, 170, 55, 16))
self.label_8.setObjectName("label_8")
self.label_9 = QtWidgets.QLabel(self.centralWidget)
self.label_9.setGeometry(QtCore.QRect(400, 210, 55, 16))
self.label_9.setObjectName("label_9")
self.label_10 = QtWidgets.QLabel(self.centralWidget)
self.label_10.setGeometry(QtCore.QRect(400, 250, 55, 16))
self.label_10.setObjectName("label_10")
self.label_11 = QtWidgets.QLabel(self.centralWidget)
self.label_11.setGeometry(QtCore.QRect(400, 290, 55, 16))
self.label_11.setObjectName("label_11")
self.label_12 = QtWidgets.QLabel(self.centralWidget)
self.label_12.setGeometry(QtCore.QRect(400, 330, 55, 16))
self.label_12.setObjectName("label_12")
self.label_13 = QtWidgets.QLabel(self.centralWidget)
self.label_13.setGeometry(QtCore.QRect(400, 370, 55, 16))
self.label_13.setObjectName("label_13")
self.label_14 = QtWidgets.QLabel(self.centralWidget)
self.label_14.setGeometry(QtCore.QRect(400, 410, 55, 16))
self.label_14.setObjectName("label_14")
self.label_15 = QtWidgets.QLabel(self.centralWidget)
self.label_15.setGeometry(QtCore.QRect(400, 450, 55, 16))
self.label_15.setObjectName("label_15")
self.label_16 = QtWidgets.QLabel(self.centralWidget)
self.label_16.setGeometry(QtCore.QRect(400, 490, 55, 16))
self.label_16.setObjectName("label_16")
self.Read_Button = QtWidgets.QPushButton(self.centralWidget)
self.Read_Button.setGeometry(QtCore.QRect(790, 520, 131, 51))
self.Read_Button.setObjectName("Read_Button")
first_text=self.Read_Button.Clicked.Connect(reading())
self.plainTextEdit = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit.setGeometry(QtCore.QRect(220, 70, 41, 31))
self.plainTextEdit.setObjectName("plainTextEdit")
self.plainTextEdit_2 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_2.setGeometry(QtCore.QRect(220, 110, 41, 31))
self.plainTextEdit_2.setObjectName("plainTextEdit_2")
self.plainTextEdit_3 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_3.setGeometry(QtCore.QRect(220, 150, 41, 31))
self.plainTextEdit_3.setObjectName("plainTextEdit_3")
self.plainTextEdit_4 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_4.setGeometry(QtCore.QRect(620, 80, 41, 31))
self.plainTextEdit_4.setObjectName("plainTextEdit_4")
self.plainTextEdit_5 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_5.setGeometry(QtCore.QRect(620, 120, 41, 31))
self.plainTextEdit_5.setObjectName("plainTextEdit_5")
self.plainTextEdit_6 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_6.setGeometry(QtCore.QRect(620, 160, 41, 31))
self.plainTextEdit_6.setObjectName("plainTextEdit_6")
self.plainTextEdit_7 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_7.setGeometry(QtCore.QRect(620, 200, 41, 31))
self.plainTextEdit_7.setObjectName("plainTextEdit_7")
self.plainTextEdit_8 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_8.setGeometry(QtCore.QRect(620, 240, 41, 31))
self.plainTextEdit_8.setObjectName("plainTextEdit_8")
self.plainTextEdit_9 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_9.setGeometry(QtCore.QRect(620, 280, 41, 31))
self.plainTextEdit_9.setObjectName("plainTextEdit_9")
self.plainTextEdit_10 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_10.setGeometry(QtCore.QRect(620, 320, 41, 31))
self.plainTextEdit_10.setObjectName("plainTextEdit_10")
self.plainTextEdit_11 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_11.setGeometry(QtCore.QRect(620, 360, 41, 31))
self.plainTextEdit_11.setObjectName("plainTextEdit_11")
self.plainTextEdit_12 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_12.setGeometry(QtCore.QRect(620, 400, 41, 31))
self.plainTextEdit_12.setObjectName("plainTextEdit_12")
self.plainTextEdit_13 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_13.setGeometry(QtCore.QRect(620, 440, 41, 31))
self.plainTextEdit_13.setObjectName("plainTextEdit_13")
self.plainTextEdit_14 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_14.setGeometry(QtCore.QRect(620, 480, 41, 31))
self.plainTextEdit_14.setObjectName("plainTextEdit_14")
self.plainTextEdit_15 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_15.setGeometry(QtCore.QRect(160, 70, 41, 31))
self.plainTextEdit_15.setReadOnly(True)
self.plainTextEdit_15.setObjectName("plainTextEdit_15")
self.plainTextEdit_16 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_16.setGeometry(QtCore.QRect(160, 110, 41, 31))
self.plainTextEdit_16.setReadOnly(True)
self.plainTextEdit_16.setObjectName("plainTextEdit_16")
self.plainTextEdit_17 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_17.setGeometry(QtCore.QRect(160, 150, 41, 31))
self.plainTextEdit_17.setReadOnly(True)
self.plainTextEdit_17.setObjectName("plainTextEdit_17")
self.plainTextEdit_18 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_18.setGeometry(QtCore.QRect(560, 80, 41, 31))
self.plainTextEdit_18.setReadOnly(True)
self.plainTextEdit_18.setObjectName("plainTextEdit_18")
self.plainTextEdit_19 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_19.setGeometry(QtCore.QRect(560, 120, 41, 31))
self.plainTextEdit_19.setReadOnly(True)
self.plainTextEdit_19.setObjectName("plainTextEdit_19")
self.plainTextEdit_20 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_20.setGeometry(QtCore.QRect(560, 160, 41, 31))
self.plainTextEdit_20.setReadOnly(True)
self.plainTextEdit_20.setObjectName("plainTextEdit_20")
self.plainTextEdit_21 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_21.setGeometry(QtCore.QRect(560, 200, 41, 31))
self.plainTextEdit_21.setReadOnly(True)
self.plainTextEdit_21.setObjectName("plainTextEdit_21")
self.plainTextEdit_22 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_22.setGeometry(QtCore.QRect(560, 240, 41, 31))
self.plainTextEdit_22.setReadOnly(True)
self.plainTextEdit_22.setObjectName("plainTextEdit_22")
self.plainTextEdit_23 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_23.setGeometry(QtCore.QRect(560, 280, 41, 31))
self.plainTextEdit_23.setReadOnly(True)
self.plainTextEdit_23.setObjectName("plainTextEdit_23")
self.plainTextEdit_24 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_24.setGeometry(QtCore.QRect(560, 320, 41, 31))
self.plainTextEdit_24.setReadOnly(True)
self.plainTextEdit_24.setObjectName("plainTextEdit_24")
self.plainTextEdit_25 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_25.setGeometry(QtCore.QRect(560, 360, 41, 31))
self.plainTextEdit_25.setReadOnly(True)
self.plainTextEdit_25.setObjectName("plainTextEdit_25")
self.plainTextEdit_26 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_26.setGeometry(QtCore.QRect(560, 400, 41, 31))
self.plainTextEdit_26.setReadOnly(True)
self.plainTextEdit_26.setObjectName("plainTextEdit_26")
self.plainTextEdit_27 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_27.setGeometry(QtCore.QRect(560, 440, 41, 31))
self.plainTextEdit_27.setReadOnly(True)
self.plainTextEdit_27.setObjectName("plainTextEdit_27")
self.plainTextEdit_28 = QtWidgets.QPlainTextEdit(self.centralWidget)
self.plainTextEdit_28.setGeometry(QtCore.QRect(560, 480, 41, 31))
self.plainTextEdit_28.setReadOnly(True)
self.plainTextEdit_28.setObjectName("plainTextEdit_28")
self.label_17 = QtWidgets.QLabel(self.centralWidget)
self.label_17.setGeometry(QtCore.QRect(150, 40, 55, 16))
self.label_17.setObjectName("label_17")
self.label_18 = QtWidgets.QLabel(self.centralWidget)
self.label_18.setGeometry(QtCore.QRect(220, 40, 55, 16))
self.label_18.setObjectName("label_18")
self.label_19 = QtWidgets.QLabel(self.centralWidget)
self.label_19.setGeometry(QtCore.QRect(550, 50, 55, 16))
self.label_19.setObjectName("label_19")
self.label_20 = QtWidgets.QLabel(self.centralWidget)
self.label_20.setGeometry(QtCore.QRect(620, 50, 55, 16))
self.label_20.setObjectName("label_20")
IPG_weld.setCentralWidget(self.centralWidget)
self.menuBar = QtWidgets.QMenuBar(IPG_weld)
self.menuBar.setGeometry(QtCore.QRect(0, 0, 1107, 26))
self.menuBar.setObjectName("menuBar")
IPG_weld.setMenuBar(self.menuBar)
self.mainToolBar = QtWidgets.QToolBar(IPG_weld)
self.mainToolBar.setObjectName("mainToolBar")
IPG_weld.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
self.statusBar = QtWidgets.QStatusBar(IPG_weld)
self.statusBar.setObjectName("statusBar")
IPG_weld.setStatusBar(self.statusBar)
self.retranslateUi(IPG_weld)
QtCore.QMetaObject.connectSlotsByName(IPG_weld)
def retranslateUi(self, IPG_weld):
_translate = QtCore.QCoreApplication.translate
IPG_weld.setWindowTitle(_translate("IPG_weld", "IPG_weld"))
self.Savebutton.setText(_translate("IPG_weld", "Сохранить"))
self.label.setText(_translate("IPG_weld", "Inputs"))
self.label_2.setText(_translate("IPG_weld", "Outputs"))
self.label_3.setText(_translate("IPG_weld", "Active"))
self.label_4.setText(_translate("IPG_weld", "Ready"))
self.label_5.setText(_translate("IPG_weld", "Error"))
self.label_6.setText(_translate("IPG_weld", "Bit 0"))
self.label_7.setText(_translate("IPG_weld", "Bit 1"))
self.label_8.setText(_translate("IPG_weld", "Bit 2"))
self.label_9.setText(_translate("IPG_weld", "Bit 3"))
self.label_10.setText(_translate("IPG_weld", "Bit 4"))
self.label_11.setText(_translate("IPG_weld", "Bit 5"))
self.label_12.setText(_translate("IPG_weld", "Bit 6"))
self.label_13.setText(_translate("IPG_weld", "Bit 7"))
self.label_14.setText(_translate("IPG_weld", "Bit 8"))
self.label_15.setText(_translate("IPG_weld", "Strobe"))
self.label_16.setText(_translate("IPG_weld", "Start"))
self.Read_Button.setText(_translate("IPG_weld", "Считать значения"))
#self.plainTextEdit_18.setPlainText(_translate("IPG_weld", "1"))
self.plainTextEdit_18.setPlainText(first_edit[1])
self.plainTextEdit_19.setPlainText(_translate("IPG_weld", "2"))
self.plainTextEdit_20.setPlainText(_translate("IPG_weld", "3"))
self.plainTextEdit_21.setPlainText(_translate("IPG_weld", "4"))
self.plainTextEdit_22.setPlainText(_translate("IPG_weld", "5"))
self.plainTextEdit_23.setPlainText(_translate("IPG_weld", "6"))
self.plainTextEdit_24.setPlainText(_translate("IPG_weld", "7"))
self.plainTextEdit_25.setPlainText(_translate("IPG_weld", "8"))
self.plainTextEdit_26.setPlainText(_translate("IPG_weld", "9"))
self.plainTextEdit_27.setPlainText(_translate("IPG_weld", "10"))
self.plainTextEdit_28.setPlainText(_translate("IPG_weld", "11"))
self.label_17.setText(_translate("IPG_weld", "Текущее "))
self.label_18.setText(_translate("IPG_weld", "Новое"))
self.label_19.setText(_translate("IPG_weld", "Текущее "))
self.label_20.setText(_translate("IPG_weld", "Новое"))

Reading.py 是:

import sys
import os
import re
import re
def reading():
with open ('Setup_Weld.src') as f:
stripped=[row.strip() for row in f]
setup_weld_num = [re.search(r'[(.*?)]',i).group(1) for i in stripped if re.search(r'[(.*?)]',i)]
print(setup_weld_num)
reading()

因此,我目前要做的是将两个在IPG_weld.py(Read_Button和Save_Button(中创建的按钮连接到我的事件: 当Read_Button单击时,应该在填充数组Setup_weld_num的地方执行 reading.py 中的 reading((,并且 PlainTextEdit_18 PlainTextEdit_28从数组中接收setup_weld_num元素。换句话说,我想从文件中读取:

&ACCESS RVP1
&REL 3
&PARAM DISKPATH = KRC:R1Programnew
DEF SETUP_WELD()
;call LASER_EN();
$out[27]=false;  START=OFF
$out[26]=false;  STROBE=OFF
$out[25]=false;  SELECT 8=OFF
$out[24]=false;  SELECT 7 =OFF
$out[23]=false;  SELECT 6 =OFF
$out[22]=false;  SELECT 5 =OFF
$out[21]=false;  SELECT 4 =OFF
$out[20]=false;  SELECT 3 =OFF
$out[19]=false;  SELECT 2 =OFF
$out[18]=false;  SELECT 1 =OFF
$out[17]=false;  SELECT 0 =OFF
$out[28]=true;  ENABLE=ON
END

并将输出数量转换为Plain_TextEdit_18 - plainTextEdit_25,以便用户能够在 Gui 的文本框中看到它们。

如何正确操作?

UPD:如你所见,我补充说:

first_text=self.Read_Button.Clicked.Connect(reading())

并尝试将数组的第一个元素first_edit传输到PlainTextEdit_18

self.plainTextEdit_18.setPlainText(first_edit[1])

但它不起作用,因为数组first_edit对于retranslate_UI函数不可见。

正如Ipg_weld.py状态顶部的注释,向该文件添加任何代码是没有用的,因为它将被Qt UI编译器重写。考虑在Gui.py中将单击处理程序函数添加到类Test中。例如:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMainWindow
from PyQt5.QtGui import QIcon
from PyQt5 import QtGui
from Ipg_weld import Ui_IPG_weld
import Reading

class Test(Ui_IPG_weld):
def __init__(self):
super().__init__()
self.widget = QMainWindow()
self.setupUi(self.widget)
# ...
self.widget.show()
def read_file(self):
file_values = Reading.reading()
print("Got values:", file_values)
# change this accordingly
self.plainTextEdit.setPlainText(file_values[0])
self.plainTextEdit_2.setPlainText(file_values[1])
# ...

if __name__ == '__main__':
app = QApplication(sys.argv)
main = Test()
sys.exit(app.exec_())

然后你有处理程序功能,连接按钮信号到它。请注意,QPushButton有信号点击(案例(,信号有方法connect(更多关于 pyqt 中的信号和插槽(。

在您的示例行中first_text=self.Read_Button.Clicked.Connect(reading())实际上调用reading(请注意括号(,但在连接信号和插槽时,您必须提供可调用connect方法(将其视为指定函数名称而不是调用它(。

总结一下,为您的班级测试__init__添加连接:

class Test(Ui_IPG_weld):
def __init__(self):
super().__init__()
self.widget = QMainWindow()
self.setupUi(self.widget)
# ...
# connecting button. Note that you should not call 
# self.read_file here.
self.Read_Button.clicked.connect(self.read_file)
self.widget.show()

现在,您应该在单击按钮时看到file_values打印。

最新更新