Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

pyqt barcode scanner lineEdit

I'm using a USB-barcode scanner to set the text of a Qt lineEdit field, the text of which is then used for other features of the GUI (specifically, the text is the name of the sample currently being measured by the user and will be saved as a filename later).

My issue is that I want to dynamically overwrite the current text in the lineEdit field with the next scanned barcode, without the user having to delete the current text by hand before scanning. Because I am simply using the scanner as a keyboard emulator rather reading properly the serial info from it, the user has to click the text field before scanning.

I can't figure out which lineEdit connect action that would allow the following:

from PyQt4 import QtGui


# add widgets etc
# ...........

# lineEdit part
self.mylineEdit = QtGui.QLineEdit()

#initialise to empty string on start up
self.mylineEdit.setText(' ')


#barcode scans here and then a returnPressed is registered

#connect to a function
self.mylineEdit.returnPressed.connect(self.set_sample_name) #here is where I want to delete the previous entry without backspacing by hand


#set the sample name variable
def set_sample_name(self):
    self.sample_name = self.mylindEdit.text()

I'm wondering is there a way of deleting the previous string in the text box before the next barcode is scanned? (without the text field going empty for a time)..

Thanks.

PS - Using python3.5.2 and pyQT4 on Ubuntu 16.04

like image 396
raman_benny Avatar asked Dec 31 '25 19:12

raman_benny


1 Answers

from PyQt5 import QtWidgets,QtCore
import sys
import os
class window(QtWidgets.QMainWindow):
    def __init__(self):
        super(window,self).__init__()
        self.mylineEdit = QtWidgets.QLineEdit()
        self.mylineEdit2 = QtWidgets.QLineEdit()
        self.startNew=1
        #initialise to empty string on start up
        self.mylineEdit.setText(' ')


        #barcode scans here and then a returnPressed is registered

        #connect to a function
        self.mylineEdit.returnPressed.connect(self.set_sample_name) #here is where I want to delete the previous entry without backspacing by hand
        self.mylineEdit.textChanged.connect(self.delete_previous)

        centwid=QtWidgets.QWidget()
        lay=QtWidgets.QVBoxLayout()
        lay.addWidget(self.mylineEdit)
        lay.addWidget(self.mylineEdit2)
        centwid.setLayout(lay)
        self.setCentralWidget(centwid)
        self.show()

        #set the sample name variable
    def set_sample_name(self):
        self.sample_name = self.mylineEdit.text()
        print(self.sample_name)
        self.startNew=1
    def delete_previous(self,text):
        if self.startNew:
            self.mylineEdit.setText(text[-1])
            self.startNew=0
app=QtWidgets.QApplication(sys.argv)
ex=window()
sys.exit(app.exec_())

As soon as return pressed signal is executed you can change the flag self.startNew=1 which will ensure whenever the text will change it will check the flag and remove the complete string as soon as new barcode is entered. I have done in PyQt5 but the concept will remain the same. The functionality is achieved in self.myLineEdit.

like image 132
Nimish Bansal Avatar answered Jan 02 '26 09:01

Nimish Bansal



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!