Python 3.x 代码运行函数时PyQt5 UI崩溃

Python 3.x 代码运行函数时PyQt5 UI崩溃,python-3.x,pyqt5,Python 3.x,Pyqt5,我对在python中使用pyqt5还很陌生,一切都是按照预期的方式运行的。我唯一的问题是,当我用“开始”按钮触发启动函数stepAction(self,index)时,我可以看到控制台中正在运行的代码,但是如果我用鼠标单击UI上的任意位置,代码运行时UI会崩溃。我想能够按下“停止”按钮,即使在用户界面上的功能正在运行。我怎样才能解决这个问题 # -*- coding: utf-8 -*- # Created by: PyQt5 UI code generator 5.13.0 import t

我对在python中使用pyqt5还很陌生,一切都是按照预期的方式运行的。我唯一的问题是,当我用“开始”按钮触发启动函数
stepAction(self,index)
时,我可以看到控制台中正在运行的代码,但是如果我用鼠标单击UI上的任意位置,代码运行时UI会崩溃。我想能够按下“停止”按钮,即使在用户界面上的功能正在运行。我怎样才能解决这个问题

# -*- coding: utf-8 -*-
# Created by: PyQt5 UI code generator 5.13.0

import time
import sys
# import RPi.GPIO as GPIO
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QVariant
stepcount = 0


class Ui_mainWindow(object):

    def setupUi(self, mainWindow):
        mainWindow.setObjectName("mainWindow")
        mainWindow.resize(557, 320)
        self.centralwidget = QtWidgets.QWidget(mainWindow)
        self.centralwidget.setEnabled(True)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(360, 40, 75, 23))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QtCore.QRect(360, 70, 75, 23))
        self.pushButton_4.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(270, 70, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QtCore.QRect(150, 40, 101, 22))
        self.comboBox.setEditable(False)
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("", QVariant(10*1600))
        self.comboBox.addItem("", QVariant(20))
        self.comboBox.addItem("", QVariant(30))
        self.comboBox.addItem("", QVariant(40))
        self.comboBox.addItem("", QVariant(50))
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 30, 121, 31))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.progressBar = QtWidgets.QProgressBar(self.centralwidget)
        self.progressBar.setGeometry(QtCore.QRect(20, 250, 118, 23))
        self.progressBar.setProperty("value", 24)
        self.progressBar.setObjectName("progressBar")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(270, 40, 75, 23))
        self.pushButton_3.setObjectName("pushButton_3")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(400, 252, 71, 21))
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setGeometry(QtCore.QRect(480, 252, 51, 21))
        self.label_3.setObjectName("label_3")
        mainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(mainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 557, 21))
        self.menubar.setObjectName("menubar")
        self.menuSmart_Spray_Booth_Configuration = QtWidgets.QMenu(self.menubar)
        self.menuSmart_Spray_Booth_Configuration.setObjectName("menuSmart_Spray_Booth_Configuration")
        mainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(mainWindow)
        self.statusbar.setObjectName("statusbar")
        mainWindow.setStatusBar(self.statusbar)
        self.menubar.addAction(self.menuSmart_Spray_Booth_Configuration.menuAction())

        self.retranslateUi(mainWindow)
        QtCore.QMetaObject.connectSlotsByName(mainWindow)
        self.comboBox.activated.connect(self.handleactivated)
        self.pushButton.clicked.connect(lambda: self.stepperaction(index=self.comboBox.currentIndex()))
        self.pushButton_2.clicked.connect(lambda: self.stop())

    def handleactivated(self, index):
        print(self.comboBox.itemText(index), "handle")
        print(self.comboBox.itemData(index), "handle")
        self.label_3.setText(self.comboBox.itemText(index))

    def retranslateUi(self, mainWindow):
        _translate = QtCore.QCoreApplication.translate
        mainWindow.setWindowTitle(_translate("mainWindow", "Smart Spray Booth - Configuration"))
        self.pushButton.setText(_translate("mainWindow", "START"))
        self.pushButton_2.setText(_translate("mainWindow", "STOP"))
        self.pushButton_3.setText(_translate("mainWindow", "Nullpunkt"))

        self.comboBox.setItemText(0, _translate("mainWindow", "5cm"))
        self.comboBox.setItemText(1, _translate("mainWindow", "10cm"))
        self.comboBox.setItemText(2, _translate("mainWindow", "15cm"))
        self.comboBox.setItemText(3, _translate("mainWindow", "20cm"))
        self.comboBox.setItemText(4, _translate("mainWindow", "25cm"))

        self.label.setText(_translate("mainWindow", "Bauteilgröße:"))
        self.label_2.setText(_translate("mainWindow", "Bauteilgröße:"))
        self.label_3.setText(_translate("mainWindow", "0 cm"))

        self.menuSmart_Spray_Booth_Configuration.setTitle(_translate("mainWindow", "Smart Spray Booth - Configuration"))

        if self.comboBox.currentTextChanged:
            print(self.comboBox.currentData(), "from if")

    def stop(self):
        print("programm wird beendet")
        sys.exit()

    def stepperaction(self, index):
        # GPIO.setmode(GPIO.BOARD)  # read the pin as board instead of BCM pin
        global stepcount
        stepcount = self.comboBox.itemData(index)
        print(stepcount, "this is given step")
        # return stepcount
        FastSpeed = 0.0001  # old = 0.001 Change this depends on your stepper motor
        LowSpeed = 0.0001   # old = 0.001 Change this depends on your stepper motor
        counter = 0
        countery = 0
        while True and counter < 3:
            print("Move Up", stepcount, "steps")
            for i in range(stepcount):
                countery = countery + 1
                print(countery)
                time.sleep(LowSpeed)
                print(countery)
                time.sleep(LowSpeed)
            time.sleep(1)
            print("Move Down", stepcount, "steps")
            for i in range(stepcount):
                countery = countery + 1
                print(countery)
                time.sleep(FastSpeed)
                print(countery)
                time.sleep(FastSpeed)
            time.sleep(1)
            counter += 1
            print("success")


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = QtWidgets.QMainWindow()
    ui = Ui_mainWindow()
    ui.setupUi(mainWindow)
    mainWindow.show()
    sys.exit(app.exec_())


#-*-编码:utf-8-*-
#创建人:PyQt5 UI代码生成器5.13.0
导入时间
导入系统
#将RPi.GPIO导入为GPIO
从PyQt5导入QtCore、QtGui、QtWidgets
从PyQt5.QtCore导入QVariant
步数=0
类Ui_主窗口(对象):
def设置UI(自我,主窗口):
mainWindow.setObjectName(“mainWindow”)
主窗口。调整大小(557320)
self.centralwidget=qtwidts.QWidget(主窗口)
self.centralwidget.setEnabled(True)
self.centralwidget.setObjectName(“centralwidget”)
self.pushButton=qtwidts.QPushButton(self.centralwidget)
自身按钮设置几何(QtCore.QRect(360,40,75,23))
self.butdown.setObjectName(“butdown”)
self.pushButton_4=qtwidts.QPushButton(self.centralwidget)
自动按钮4.设置几何(QtCore.QRect(360、70、75、23))
self.butdown_4.setObjectName(“按钮”)
self.pushButton_2=qtwidts.QPushButton(self.centralwidget)
自动按钮2.设置几何(QtCore.QRect(270、70、75、23))
self.butdown_2.setObjectName(“butdown_2”)
self.comboBox=qtwidts.QComboBox(self.centralwidget)
self.comboBox.setGeometry(QtCore.QRect(150,40,101,22))
self.comboBox.setEditable(False)
self.comboBox.setObjectName(“comboBox”)
self.comboBox.addItem(“,QVariant(10*1600))
self.comboBox.addItem(“,QVariant(20))
self.comboBox.addItem(“,QVariant(30))
self.comboBox.addItem(“,QVariant(40))
self.comboBox.addItem(“,QVariant(50))
self.label=qtwidts.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(20,30,121,31))
font=QtGui.QFont()
字体设置点大小(12)
self.label.setFont(字体)
self.label.setObjectName(“标签”)
self.progressBar=qtwidts.QProgressBar(self.centralwidget)
self.progressBar.setGeometry(QtCore.QRect(20250118,23))
self.progressBar.setProperty(“值”,24)
self.progressBar.setObjectName(“progressBar”)
self.pushButton_3=qtwidts.QPushButton(self.centralwidget)
自动按钮_3.设置几何(QtCore.QRect(270、40、75、23))
self.butdown_3.setObjectName(“butdown_3”)
self.label_2=qtwidts.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(4002527121))
self.label_2.setObjectName(“label_2”)
self.label_3=qtwidts.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(480、252、51、21))
self.label_3.setObjectName(“label_3”)
mainWindow.setCentralWidget(self.centralwidget)
self.menubar=qtwidts.QMenuBar(主窗口)
self.menubar.setGeometry(QtCore.QRect(0,0557,21))
self.menubar.setObjectName(“menubar”)
self.menuSmart\u Spray\u Booth\u Configuration=qtwidts.QMenu(self.menubar)
self.menuSmart\u Spray\u Booth\u Configuration.setObjectName(“menuSmart\u Spray\u Booth\u Configuration”)
mainWindow.setMenuBar(self.menubar)
self.statusbar=qtwidts.QStatusBar(主窗口)
self.statusbar.setObjectName(“statusbar”)
main window.setStatusBar(self.statusbar)
self.menubar.addAction(self.menuSmart\u Spray\u Booth\u Configuration.menuAction())
自重传(主窗口)
QtCore.QMetaObject.connectSlotsByName(主窗口)
self.comboBox.activated.connect(self.handleactivated)
self.putton.clicked.connect(lambda:self.stepperaction(index=self.comboBox.currentIndex())
self.button_2.clicked.connect(lambda:self.stop())
def手动激活(自,索引):
打印(self.comboBox.itemText(索引),“句柄”)
打印(self.comboBox.itemData(索引),“句柄”)
self.label_3.setText(self.comboBox.itemText(索引))
def重新传输(自身,主窗口):
_translate=QtCore.QCoreApplication.translate
setWindowTitle(_翻译(“mainWindow”,“智能喷漆室-配置”))
self.putton.setText(_translate(“主窗口”、“开始”))
self.button_2.setText(_translate(“主窗口”、“停止”))
self.butdown_3.setText(_translate(“主窗口”、“Nullpunkt”))
self.comboBox.setItemText(0,_翻译(“主窗口”,“5cm”))
self.comboBox.setItemText(1,_翻译(“主窗口”,“10cm”))
self.comboBox.setItemText(2,_翻译(“主窗口”,“15cm”))
self.comboBox.setItemText(3,_翻译(“主窗口”,“20cm”))
self.comboBox.setItemText(4,_翻译(“主窗口”,“25cm”))
self.label.setText(_translate(“mainWindow”,“Bauteigröe:”))
self.label_2.setText(_translate(“主窗口”,“Bauteilgröe:”))
self.label_3.setText(_translate(“主窗口”,“0厘米”))
self.menuSmart\u Spray\u Booth\u Configuration.setTitle(_translate(“主窗口”,“智能喷漆室-配置”))
如果self.comboBox.currentTextChanged:
打印(self.comboBox.currentData(),“来自if”)
def停止(自):
打印(“程序向导”)
sys.exit()
def步进操作(自身,索引):
#GPIO.setmode(GPIO.BOARD)#将引脚读取为BOARD,而不是BCM引脚
全局步数
stepcount=self.comboBox.itemData(索引)
打印(步骤计数,“这是给定步骤”)
#返回步数
FastSpeed=0.0001#old=0.001更改这取决于您的步进电机
低速=
....
    self.pushButton.clicked.connect(self.stepperaction)
....

def stepperaction(self, index=None):
    if index is None:
        index = self.comboBox.currentIndex()
    # GPIO.setmode(GPIO.BOARD)  # read the pin as board instead of BCM pin
    global stepcount
....