import sys
from PyQt5.QtGui import QPainter, QPen, QBrush
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt
class EyeChart(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(300, 300, 200, 200)
self.setWindowTitle('Eye Chart')
self.__cur_keys = ''
self.show()
def keyPressEvent(self, event):
if(event.text().isalpha()):<-
self.__cur_keys += event.text().upper()<-
if(len(self.__cur_keys)<5):<-
self.repaint()<-
else:<-
self.update()
箭头和5行代码是我需要帮助修复的内容。
最多可以输入5个字母。一旦输入5个字母,随后的任何字母按键操作都将以当前显示的第一个字母替换为当前显示的第一个字母(所有字母向左移动) )。 <-这是我需要我的代码执行的操作,将所有字母向左移动。上面的代码是我拥有的,目前无法正常工作。
输出应如下所示- 用户输入#1- ABCDE 用户输入2-用户按下Q,现在输出为BCDEQ 输出总是假定为5个字母,并且一旦用户按下新字母,一切都应该向左移动。上面的代码是我尝试过的代码,对此我将不胜感激。
答案 0 :(得分:0)
嗨Alex,欢迎来到Stack Exchange。如果您使用的是QlineEdit(我怀疑您是QlineEdit),则您必须创建一种方法,以便每次用户将第二个字符放入第二行时都进行检查。因此,在这里,我仅向您展示如何做您想做的事,然后将此想法应用到您的代码中。
import sys
from PyQt5.QtGui import QPainter, QPen, QBrush
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
class EyeChart(QWidget):
def __init__(self):
super().__init__()
self.setGeometry(300, 300, 200, 200)
self.setWindowTitle('Eye Chart')
# From here please apply it to your designated software
self.lineEdit_1 = QtWidgets.QLineEdit(QWidget)
self.lineEdit_2 = QtWidgets.QLineEdit(QWidget)
# every added or removed character will call the checker method
self.lineEdit_2.textEdited.connect(self.checker)
def checker(self):
"""This will delete tfirst character until it fits the 5-char-agenda"""
first = self.lineEdit_1.text()
second = self.lineEdit_2.text()
stacked = first + second
while len(stacked) > 5:
l = list(stacked)
del(l[0])
y = "".join(l)
上面的代码向您展示了如何执行此操作的概念。如果您还有其他需要,请发表评论,我将编辑您的答案以满足您的需求。
祝您成为SE社区的新成员愉快。