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 имеет две сигнатуры:

  1. clicked();
  2. clicked(bool). В Вашем случае, будет использоваться второй вариант и в переменной wordNow будет лежать значение True или False. Если Вы хотите передать в слот какое-либо значение, вы можете использовать property.
→ Ссылка