如何通过单击 QPushButton 在 QLineEdit 中输入输入,然后在 QLabel 中打印结果?

How to get input entered in QLineEdit by clicking QPushButton and then print result in QLabel?

首先,我想完整地解释一下我将要做什么。我有一个简单的脚本,我想将它转换成一个可执行文件或任何你称之为的文件,但首先我应该从界面的东西开始。

这是简单的 python 脚本:

for i in range(4):
    a = False
    while not a:
        text = input("enter a word")
        
        # a condition for accepting input. I mean input should satisfy this condition
        if len(text) == 5:
            a = True
    
    # just print the word, simple and easy
    print(text)

我想把这个过程放在PyQt5中来创建一个极其简单的用户输入界面。但我该怎么做呢?我想添加一个 QLineEdit 来获取输入!输入是一个类似字符串的文本!我想通过单击 QPushButton 触发并输入单词!虽然输入不满足条件 (len(text) == 5),但我应该能够在 QLineEdit 中键入另一个输入并使用 QPushButton 输入它,直到输入满足条件!那么程序应该 print(text)QLabel 中(我认为 QLabel 没问题,因为我可以调整它的维度和大小...)。重要的是我应该能够在程序中编写并输入 4 个正确的单词(满足条件的单词)(因为我写了 for i in range(4):)。所以这是我期望的一步一步:

  1. 能够正确输入4个单词
  2. 通过 QLineEdit
  3. 获取输入
  4. 点击 QPushButton
  5. 输入内容
  6. 如果单词的长度是5,则打印它,否则:等待下一次输入
  7. 对 4 个有效输入执行此过程

我对pyqt5不是很熟悉,但我已经尽力了。这是我为此写的:

from PyQt5.QtWidgets import QApplication , QWidget , QPushButton , QLabel , QLineEdit
import sys

app = QApplication(sys.argv)

class APP(QWidget):
    def __init__(self):
        super().__init__()

        self.button = QPushButton("Enter" , self)
        self.button.setGeometry(500 , 400 , 100 , 50)
        self.button.clicked.connect(self.clicked)
        self.Line_edit()

        self.label = QLabel("place of ouput prints" , self)
        self.label.move(40 , 60)
        self.label.setGeometry(50 , 50 , 150 , 50)

    def Line_edit(self):
        self.input_text = QLineEdit(self)
        self.input_text.setPlaceholderText("Enter The Word")
    
    def clicked(self):
        # if QLineEdit contains a word
        if self.input_text.text():
            for i in range(4):
                a = False
                while not a:
                    text = self.input_text.text()

                    # a condition for accepting input. I mean input should satisfy this condition
                    if len(text) == 5:
                        a = True

                # just print the word in QLable, simple and easy
                self.label = QLabel(text , self)
                # then it should be waiting for new input untill i == 3 (since i wrote for i in range(4))


window = APP()
window.show()
sys.exit(app.exec_()) 

当我尝试 运行 这段代码时,它甚至没有反应,什么也没有发生。我应该如何修改代码才能得到我应该得到的东西?

我自己想出了解决办法。当您单击 QPushButton 时,我对信号含义完全错了!我发现 QLabel 可以使用 .setText() 更新!所以这是解决方案:

from PyQt5.QtWidgets import QApplication , QWidget , QPushButton , QLabel , QLineEdit
import sys

app = QApplication(sys.argv)

class APP(QWidget):
    def __init__(self):
        super().__init__()

        self.button = QPushButton("Enter" , self)
        self.button.setGeometry(500 , 400 , 100 , 50)
        self.button.clicked.connect(self.clicked)
        self._submit_counter = 0
        
        self.button2 = QPushButton("RESET" , self)
        self.button2.setGeometry(500 , 600 , 100 , 50)
        self.button2.clicked.connect(self.reset_clicked)
        
        self.Line_edit()

        self.label = QLabel("place of ouput prints" , self)
        self.label.move(40 , 60)
        self.label.setGeometry(50 , 50 , 150 , 50)

    def Line_edit(self):
        self.input_text = QLineEdit(self)
        self.input_text.setPlaceholderText("Enter The Word")

    def reset_clicked(self):
        self._submit_counter = 0
    
    def clicked(self):

        if self._submit_counter<4:

            # if QLineEdit contains a word
            if self.input_text.text():
                
                text = self.input_text.text()

                # a condition for accepting input. I mean input should satisfy this condition
                if len(text) == 5:
                    
                    self._submit_counter += 1
                    # just print the word in QLable, simple and easy
                    self.label.setText(text)


window = APP()
window.show()
sys.exit(app.exec_())