python 游戏脚本搜索框怎么输入文本_PyQt文本框搜索功能

为PyQt文本框添加搜索功能,效果如下:

1.UI定义如下

Ui_main.py

from PyQt4 import QtCore, QtGui

try:

_fromUtf8 = QtCore.QString.fromUtf8

except AttributeError:

def _fromUtf8(s):

return s

try:

_encoding = QtGui.QApplication.UnicodeUTF8

def _translate(context, text, disambig):

return QtGui.QApplication.translate(context, text, disambig, _encoding)

except AttributeError:

def _translate(context, text, disambig):

return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

MainWindow.setObjectName(_fromUtf8("MainWindow"))

MainWindow.resize(800, 600)

self.centralWidget = QtGui.QWidget(MainWindow)

self.centralWidget.setObjectName(_fromUtf8("centralWidget"))

self.verticalLayout = QtGui.QVBoxLayout(self.centralWidget)

self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))

self.horizontalLayout = QtGui.QHBoxLayout()

self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))

self.search_edit = QtGui.QLineEdit(self.centralWidget)

self.search_edit.setObjectName(_fromUtf8("search_edit"))

self.horizontalLayout.addWidget(self.search_edit)

self.search_btn = QtGui.QPushButton(self.centralWidget)

self.search_btn.setObjectName(_fromUtf8("search_btn"))

self.horizontalLayout.addWidget(self.search_btn)

self.search_res = QtGui.QLabel(self.centralWidget)

self.search_res.setObjectName(_fromUtf8("search_res"))

self.horizontalLayout.addWidget(self.search_res)

spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)

self.horizontalLayout.addItem(spacerItem)

self.verticalLayout.addLayout(self.horizontalLayout)

self.textBrowser = QtGui.QTextBrowser(self.centralWidget)

self.textBrowser.setObjectName(_fromUtf8("textBrowser"))

self.verticalLayout.addWidget(self.textBrowser)

MainWindow.setCentralWidget(self.centralWidget)

self.retranslateUi(MainWindow)

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))

self.search_btn.setText(_translate("MainWindow", "搜索", None))

self.search_res.setText(_translate("MainWindow", "0/0", None))

2.main.py文件如下

# coding=utf-8

from PyQt4.QtGui import QMainWindow, QApplication, QTextCursor

from PyQt4.QtCore import QTextCodec

import sys

from Ui_main import Ui_MainWindow

"""初始化QT编码设置"""

reload(sys)

sys.setdefaultencoding('utf-8')

QTextCodec.setCodecForCStrings(QTextCodec.codecForName("utf-8"))

def Qstring2Str(qStr):

"""转换Qstring类型为str类型"""

return unicode(qStr.toUtf8(), 'utf-8', 'ignore')

class MainWindow(QMainWindow, Ui_MainWindow):

def __init__(self, parent=None):

QMainWindow.__init__(self, parent)

self.setupUi(self)

# 文本框

self.textBrowser.setText("这是测试文字...测试,测试,测试,一共多少个测试?")

# 文本框内容变化重设被搜索内容

self.textBrowser.textChanged.connect(self.reset_search_content)

# 点击按钮开始搜索

self.search_btn.clicked.connect(self.search)

# 搜索相关项

self.search_content = None

self.search_key = None

self.search_count = 0

self.search_current = 0

def select(self, start, length):

"""选中文字,高亮显示"""

cur = QTextCursor(self.textBrowser.textCursor())

cur.setPosition(start)

cur.setPosition(start + length, QTextCursor.KeepAnchor)

self.textBrowser.setTextCursor(cur)

def reset_search_content(self):

"""改变待搜索内容"""

self.search_content = None

self.search_count = 0

self.search_current = 0

def search(self):

"""搜索"""

key_word = Qstring2Str(self.search_edit.text())

if key_word != self.search_key:

self.search_key = key_word

self.search_count = 0

self.search_current = 0

if not self.search_content:

self.search_content = Qstring2Str(self.textBrowser.toPlainText())

if not self.search_count:

self.search_count = self.search_content.count(key_word)

if self.search_count != 0:

start = self.search_content.index(key_word)

self.select(start, len(key_word))

self.search_current += 1

else:

if self.search_current < self.search_count:

start = self.search_content.find(key_word, self.textBrowser.textCursor().position())

if start != -1:

self.select(start, len(key_word))

self.search_current += 1

else:

self.search_count = 0

self.search_current = 0

self.search()

self.textBrowser.setFocus()

self.search_res.setText("{}/{}".format(self.search_current, self.search_count))

if __name__ == '__main__':

app = QApplication(sys.argv)

ui = MainWindow()

ui.show()

sys.exit(app.exec_())

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值