clicked.connect на pushButton
Не очень понимаю, как работает clicked.connect(). Если в скобках пишу метод без вызова, то форма открывается, но, естественно, не выполняется то, что надо. Если вызов метода есть, то форма не показывается, даже если программа запущена.
main.py:
import window1
import sys
from PyQt5 import QtWidgets
from random import randint
words = ['первое', 'второе', 'третье']
class ExampleApp(QtWidgets.QMainWindow, window1.Ui_MainWindow):
def __init__(self):
# Это здесь нужно для доступа к переменным, методам
# и т.д. в файле design.py
super().__init__()
self.setupUi(self) # Это нужно для инициализации нашего дизайна
wordNow = self.chooseWord()
self.pushButton.clicked.connect(self.checkLetter)
def chooseWord(self) :
number = randint(0, len(words)-1)
wordNow = words[number]
self.label_2.setText("Слово загадано. начинайте угадывать букву.")
return wordNow
def checkLetter(self, wordNow):
result = 0
while (result < len(wordNow)) :
resultOld = result
letter = self.lineEdit.text()
for i in range (len(wordNow)) :
if wordNow[i]==letter :
result=result+1
if result!=resultOld : self.label_2.setText("Данная буква встретилась в cлове столько раз: ", result-resultOld)
else : self.label_2.setText("Такой буквы в слове нет!")
def main():
app = QtWidgets.QApplication(sys.argv) # Новый экземпляр QApplication
window = ExampleApp() # Создаём объект класса ExampleApp
window.show() # Показываем окно
app.exec_() # и запускаем приложение
if __name__ == '__main__': # Если мы запускаем файл напрямую, а не импортируем
main() # то запускаем функцию main()
Ответы (2 шт):
Автор решения: S. Nick
→ Ссылка
Я увидел вашу задачу так. Если что-то не понятно - спросите.
import sys
from random import randint, choices
from PyQt5 import QtWidgets, QtGui, QtCore
#import window1 # ---
#from window1 import Ui_MainWindow # +++
#words = ['первое', 'второе', 'третье']
#class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
class ExampleApp(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
# self.setupUi(self)
self.centralWidget = QtWidgets.QWidget()
self.setCentralWidget(self.centralWidget)
self.words = ['первое', 'второе', 'третье']
self.wordNow = choices(self.words)[0]
self.word = '-' * len(self.wordNow)
self.letters = []
self.label = QtWidgets.QLabel()
self.label.setText(self.word)
self.label_2 = QtWidgets.QLabel()
self.lineEdit = QtWidgets.QLineEdit()
self.lineEdit.setPlaceholderText('Введите букву')
self.lineEdit.setMaxLength(1)
self.pushButton = QtWidgets.QPushButton('Button')
self.pushButton.clicked.connect(self.checkLetter)
layout = QtWidgets.QGridLayout(self.centralWidget)
layout.addWidget(self.label, 0, 0, alignment=QtCore.Qt.AlignCenter)
layout.addWidget(self.label_2)
layout.addWidget(self.lineEdit)
layout.addWidget(self.pushButton)
def checkLetter(self):
result = 0
letter = self.lineEdit.text()
if letter in self.letters:
self.label_2.setText(f"Вы уже проверяли букву `{letter}`!")
self.lineEdit.clear()
self.lineEdit.setFocus()
return
else:
self.letters.append(letter)
while (result < len(self.wordNow)) :
resultOld = result
for i in range (len(self.wordNow)) :
if self.wordNow[i] == letter :
result = result + 1
self.word = self.word[0:i] + letter + self.word[i+1:]
self.label.setText(self.word)
if result != resultOld :
self.label_2.setText(
f"Данная буква встретилась в cлове столько раз: {result-resultOld}")
else :
self.label_2.setText(f"Буквы `{letter}` в слове нет!")
self.lineEdit.clear()
self.lineEdit.setFocus()
return
self.lineEdit.clear()
self.lineEdit.setFocus()
if not '-' in self.word:
self.label_2.setText("Вы угадали слово!")
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
app.setFont(QtGui.QFont("Times", 12, QtGui.QFont.Bold))
window = ExampleApp()
window.resize(450, 100)
window.show()
sys.exit(app.exec_())
Автор решения: Иван Коваленко
→ Ссылка
Сигнал clicked у QPushButton имеет две сигнатуры:
- clicked();
- clicked(bool). В Вашем случае, будет использоваться второй вариант и в переменной wordNow будет лежать значение True или False. Если Вы хотите передать в слот какое-либо значение, вы можете использовать property.
