PyQt5 При нажатии на кнопку класса Push Button программа завершается, не выводя ответ
Моя программа должна при нажатии на кнопку Inicialization вызывать функцию getArr, которая выводит в виджете InputArr перемешанную последовательность от 1 до 10, но при нажатии программа самопроизвольно завершается, не выводя ошибки. В чем проблема?
from PyQt5 import QtWidgets, QtGui
import sys
class MyWin(QtWidgets.QMainWindow):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.arr = []
self.len_arr = 0
self.n = 10
self.ui.Inicialization.clicked.connect(self.getArr)
#функция, при нажатии на кнопку Inicialization
def getArr(self, n=10):
for i in range(n):
self.arr.append(i+1)
random.shuffle(self.arr)
self.ui.InputArr.setText(str(self.arr))
if __name__ =="__main__":
app = QtWidgets.QApplication(sys.argv)
application = MyWin()
application.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Проблема в том, что вы не опубликовали модуль, содержащий класс Ui_MainWindow и в подключении кнопки к слоту через сигнал clicked.
import sys
import random
from PyQt5 import QtWidgets, QtGui
class MyWin(QtWidgets.QMainWindow):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
# self.ui = Ui_MainWindow()
# self.ui.setupUi(self)
self.centralwidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralwidget)
self.InputArr = QtWidgets.QLabel()
self.Inicialization = QtWidgets.QPushButton('Inicialization')
layout = QtWidgets.QVBoxLayout(self.centralwidget)
layout.addWidget(self.InputArr)
layout.addWidget(self.Inicialization)
self.arr = []
self.len_arr = 0
self.n = 10
self.Inicialization.clicked.connect(lambda ch, n=self.n: self.getArr(n)) # <-----
#функция, при нажатии на кнопку Inicialization
def getArr(self, n):
for i in range(n):
self.arr.append(i+1)
print(self.arr)
random.shuffle(self.arr)
self.InputArr.setText(str(self.arr))
if __name__ =="__main__":
app = QtWidgets.QApplication(sys.argv)
application = MyWin()
application.show()
sys.exit(app.exec_())
