python - 当 QPlainTextEdit 在一定长度时运行方法
问题描述
我有一个 pyqt 对话框,它接收以返回结尾的数据列表(来自具有自动返回的条形码扫描仪。)
该列表的长度为 5 项,目前我必须在populate_row
输入 5 项时单击“添加数据”才能运行该方法。
我将字符串拆分为一个列表,\n
并根据需要处理每个项目。
当框中add data
的行数或数量\n
达到5时,有没有一种方法可以自动按下按钮?QPlainTextEdit
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Status(QDialog):
def __init__(self, parent=None):
super(Status, self).__init__(parent)
self.label = QLabel()
self.btn = QPushButton("Input Data")
self.btn.clicked.connect(self.populate_row)
self.layout = QVBoxLayout()
self.layout.addWidget(self.btn)
self.layout.addWidget(self.label)
self.resize(660, 260)
self.setLayout(self.layout)
def populate_row(self, letter):
self.dialog = QDialog()
self.dialog.resize(660, 260)
self.textBox = QPlainTextEdit(self.dialog)
Rbtn = QPushButton("Add Data")
Rbtn.clicked.connect(
lambda: self.enter_data(self.textBox.toPlainText()))
layout = QVBoxLayout(self.dialog)
layout.addWidget(self.textBox)
layout.addWidget(Rbtn)
self.dialog.exec_()
def enter_data(self, text):
self.label.setText(text)
lst = text.split("\n")
try:
for x in lst:
if x != "":
print(x)
self.do_something_with_x()
except IndexError:
pass
self.update_data()
self.dialog.close()
def do_something_with_x(self):
print('Something done with x..')
def update_data(self):
print('Data updated..')
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Status()
ex.show()
sys.exit(app.exec_())
解决方案
无效 QPlainTextEdit::blockCountChanged(int newBlockCount)
每当块计数发生变化时,都会发出此信号。新的块计数在 newBlockCount 中传递。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
class Status(QDialog):
def __init__(self, parent=None):
super(Status, self).__init__(parent)
self.label = QLabel()
self.btn = QPushButton("Input Data")
self.btn.clicked.connect(self.populate_row)
self.layout = QVBoxLayout()
self.layout.addWidget(self.btn)
self.layout.addWidget(self.label)
self.resize(660, 260)
self.setLayout(self.layout)
def populate_row(self, letter):
self.dialog = QDialog()
self.dialog.resize(660, 260)
self.textBox = QPlainTextEdit(self.dialog)
#
self.textBox.blockCountChanged[int].connect(self.blockCount) # +++
Rbtn = QPushButton("Add Data")
Rbtn.clicked.connect(
lambda: self.enter_data(self.textBox.toPlainText()))
layout = QVBoxLayout(self.dialog)
layout.addWidget(self.textBox)
#layout.addWidget(Rbtn) # ---
self.dialog.exec_()
## +++
def blockCount(self, num):
if num > 5:
self.enter_data(self.textBox.toPlainText())
##
def enter_data(self, text):
self.label.setText(text)
lst = text.split("\n")
try:
for x in lst:
if x != "":
print(x)
self.do_something_with_x()
except IndexError:
pass
self.update_data()
self.dialog.close()
def do_something_with_x(self):
print('Something done with x..')
def update_data(self):
print('Data updated..')
if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Status()
ex.show()
sys.exit(app.exec_())
推荐阅读
- bash - 出现异常时如何退出脚本?
- python - 设置新的 REG_MULTI_SZ 值?
- lambda-calculus - 根据存在类型编码通用类型?
- botframework - 负载测试 Microsoft 网络聊天机器人
- tensorflow - 家庭监控,TensorFlow (+ OpenCV)
- sql - 从 SQL Server 中具有两个链接表的表中提取多行
- c++ - Qt 是否提供访问公共/共享用户文件夹的方法?
- azure-devops - Azure DevOps / Azure KeyVault:通过模板部署添加服务主体
- java - NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;CLjava/lang/Object;)V
- javascript - 一般来说,reduce 比 filter + map 快吗?