Merhaba ;
Yeni başladığım bir proje var. Bu projede qtdesingerler bir form oluşturdum forumda yapmak istediğim barkod okutma işleminde 1. qlineedit okutunca imleç 2.qlineedit geçsin ve sonra butona geçsin
Bunu nasıl yapabilirim? Araştırmlarımda bir kaynak bulamadım aklımada bir fikir gelmedi yeniyim.
Senin için basit bir örnek yaptım. Bunu deneyebilirsin.
from PyQt5.QtWidgets import QDialog, QLineEdit, QPushButton, QApplication, QFrame,QVBoxLayout
import sys
class TestPenceresi(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.setFixedSize(355, 490)
self.setStyleSheet("background-color: white;")
self.frame = QFrame(self)
self.frame.setFixedSize(355, 490)
self.layout = QVBoxLayout(self.frame)
self.textLine1 = QLineEdit()
self.textLine2 = QLineEdit()
self.buton = QPushButton("buton")
self.layout.addWidget(self.textLine1)
self.layout.addWidget(self.textLine2)
self.layout.addWidget(self.buton)
self.show()
self.textLine1.textChanged.connect(self.textChangedFonk1)
self.textLine2.textChanged.connect(self.textChangedFonk2)
self.buton.clicked.connect(lambda: print("butona basıldı"))
def textChangedFonk1(self):
# Eğer barkod numarası uzunluğu (karakter sayısı) sabit ve kullanıcı elle klavyeden giriş yapacaksa
# belirli karaktere ulaştıktan sonra diğer QLineEdit'gecmek için karakter sayısını kontrol etmek
# Varsayalım ki barkod karakter sayısı 10 olsun
if len(self.textLine1.text()) == 10:
# Odak noktasını değiştirme ikinci lineEdit' yönlendirme
self.textLine2.setFocus()
def textChangedFonk2(self):
# Eğer barkod numarası uzunluğu (karakter sayısı) sabit ve kullanıcı elle klavyeden giriş yapacaksa
# belirli karaktere ulaştıktan sonra diğer QLineEdit'gecmek için karakter sayısını kontrol etmek
# Varsayalım ki barkod karakter sayısı 10 olsun
if len(self.textLine2.text()) == 10:
# Odak noktasını değiştirme buton üzerine yönlendirme
self.buton.setFocus()
if __name__ == "__main__":
app = QApplication(sys.argv)
uygulama = TestPenceresi()
uygulama.exec_()
Hocam teşekkürler olmuş lakin benim barkod karakter sayısı değişken bu 10 yerine “enter” tuş olarak ayarlayabilirmiyiz?
Barkod okutunca sonunda enter komutu gönderir diye biliyorum.
Bu fonksiyondaki if kullanımını kaldır ve enter tuşuyla yapmak istediğin fonksiyonu çağır.
Fakat burada şöyle bir problem ortaya çıkıyor: Kullanıcı klavyeden manuel giriş yaparsa her karakter girişinde yani sen tüm barkod karakterlerini yazamadan işlem tamamlanmış gibi davranacak. (Bu problem yalnızca manuel girişte ortaya çıkıyor. Barkod tarayıcıyla girişte sıkıntı olmayacaktır.)
Teşükler cevaplarınız için
Lakin özür dileyerek Örnek varmı?
Kodunuzu gönderirseniz yardımcı olabilirim
class veri_gir(QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
## Ekran çerçevesi
flags = Qt.WindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
self.setWindowFlags(flags)
self.cboperator()
self.cbmodel()
########################################### Sayfa düzeni ##############################################################
self.gripSize=10
self.grip =QtWidgets.QSizeGrip(self)
self.grip.resize(self.gripSize, self.gripSize)
########################################### Menu gizle aç ##############################################################
self.ui.frame_ust.mouseReleaseEvent=self.menu()
####### Üst menüler
self.ui.bt_menu.clicked.connect(self.menu)
self.ui.bt_kapat.clicked.connect(lambda: self.close())
self.ui.bt_simgedurumu.clicked.connect(self.bt_simge)
self.ui.bt_normalekran.clicked.connect(self.bt_normal)
self.ui.bt_tamekran.clicked.connect(self.bt_tamekran)
## Sayfalar
self.ui.bt_verigirisi.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page))
self.ui.bt_verimlilik.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page_2))
self.ui.bt_rapor.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page_3))
self.ui.bt_duzenle.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page_7))
####### İlk açılışta normal ekran butonu gizleme
self.ui.bt_normalekran.hide()
## Üst simgeler
def bt_simge(self):
self.showMinimized()
def bt_normal(self):
self.showNormal()
self.ui.bt_normalekran.hide()
self.ui.bt_tamekran.show()
def bt_tamekran(self):
self.showMaximized()
self.ui.bt_normalekran.show()
self.ui.bt_tamekran.hide()
####### Görüntü sığdırma ayarı
def resizeEbent(self,event):
rect =self.rect()
self.grip.move(rect.right() - self.gripSize, rect.bottom() - self.gripSize)
####### Üst menü gizle aç ayarı
def menu(self):
if True:
width = self.ui.frame_sol.width()
normal =0
if width==0:
extender =150
else:
extender = normal
self.animation = QPropertyAnimation(self.ui.frame_sol, b"minimumWidth")
self.animation.setDuration(300)
self.animation.setStartValue(width)
self.animation.setEndValue(extender)
self.animation.setEasingCurve(QtCore.QEasingCurve.InOutQuart)
self.animation.start()
####### Mause ile programı hareket ettirme
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.__press_pos = event.pos()
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.__press_pos = None
def mouseMoveEvent(self, event):
if self.__press_pos:
self.move(self.pos() + (event.pos() - self.__press_pos))
####### Veri Kaydetme
def cbmodel(self):
islem.execute("select UrunAciklamasi from UrunEkle")
self.liste = islem.fetchall()
self.liste.sort()
for x in self.liste:
self.ui.cbmodelekle.addItems(x)
def cboperator(self):
islem.execute("select OperatorKodu from OperatorEkle")
self.liste = islem.fetchall()
self.liste.sort()
for x in self.liste:
self.ui.cboperatorekle.addItems(x)
self.ui.cbortakisoperator.addItems(x)
## SHOW ==> MAIN WINDOW
self.show()
## ==> END ##
Buyurun
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from PyQt5 import QtCore
import sys
class veri_gir(QMainWindow):
def __init__(self):
super().__init__()
#self.ui = Ui_MainWindow()
#self.ui.setupUi(self)
self.setFixedSize(250, 150)
## Ekran çerçevesi
flags = Qt.WindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
self.setAttribute(Qt.WA_TranslucentBackground, True) # şeffaf pencere
self.setWindowFlags(flags)
### Pencere Ögeleri
self.frame = QFrame(self)
self.frame.setFixedSize(250, 150)
self.frame.setStyleSheet("QFrame{background-color: rgb(200,200,200); border-radius: 10px;}")
self.layout = QVBoxLayout(self.frame)
self.layout.setContentsMargins(10, 15, 10, 16) # iç ögeler arası boşluk
self.textLine1 = QLineEdit()
self.textLine2 = QLineEdit()
self.buton = QPushButton("Ekle")
self.textLine1.setFixedSize(230, 30)
self.textLine2.setFixedSize(230, 30)
self.textLine1.setStyleSheet("QLineEdit{border-radius: 8px; background-color: white}")
self.textLine2.setStyleSheet("QLineEdit{border-radius: 8px; background-color: white}")
self.buton.setStyleSheet("QPushButton{border-radius: 8px; background-color: white}")
self.layout.addWidget(self.textLine1)
self.layout.addWidget(self.textLine2)
self.layout.addStretch()
self.layout.addWidget(self.buton)
self.textLine1.textChanged.connect(self.textChangedFonk1)
self.textLine2.textChanged.connect(self.textChangedFonk2)
self.buton.clicked.connect(lambda: print("butona basıldı"))
def textChangedFonk1(self):
if len(self.textLine1.text()) > 0:
# Odak noktasını değiştirme ikinci lineEdit' yönlendirme
self.textLine2.setFocus()
def textChangedFonk2(self):
if len(self.textLine2.text()) > 0:
self.setFocus()
# işlem tamamlandı.
self.urun_ekle_fonk()
def urun_ekle_fonk(self):
print("ürün eklendi")
# Buraya yapmak istediğniz işlemizi kodlayınız.
# self.cboperator()
# self.cbmodel()
########################################### Sayfa düzeni ##############################################################
self.gripSize=10
self.grip = QSizeGrip(self)
self.grip.resize(self.gripSize, self.gripSize)
########################################### Menu gizle aç ##############################################################
# self.ui.frame_ust.mouseReleaseEvent=self.menu()
####### Üst menüler
# self.ui.bt_menu.clicked.connect(self.menu)
# self.ui.bt_kapat.clicked.connect(lambda: self.close())
# self.ui.bt_simgedurumu.clicked.connect(self.bt_simge)
# self.ui.bt_normalekran.clicked.connect(self.bt_normal)
# self.ui.bt_tamekran.clicked.connect(self.bt_tamekran)
## Sayfalar
# self.ui.bt_verigirisi.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page))
# self.ui.bt_verimlilik.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page_2))
# self.ui.bt_rapor.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page_3))
# self.ui.bt_duzenle.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page_7))
####### İlk açılışta normal ekran butonu gizleme
# self.ui.bt_normalekran.hide()
## Üst simgeler
def bt_simge(self):
self.showMinimized()
def bt_normal(self):
self.showNormal()
self.ui.bt_normalekran.hide()
self.ui.bt_tamekran.show()
def bt_tamekran(self):
self.showMaximized()
self.ui.bt_normalekran.show()
self.ui.bt_tamekran.hide()
####### Görüntü sığdırma ayarı
def resizeEbent(self,event):
rect =self.rect()
self.grip.move(rect.right() - self.gripSize, rect.bottom() - self.gripSize)
####### Üst menü gizle aç ayarı
def menu(self):
if True:
width = 100 # self.ui.frame_sol.width()
normal =0
if width==0:
extender =150
else:
extender = normal
# self.animation = QPropertyAnimation(self.ui.frame_sol, b"minimumWidth")
# self.animation.setDuration(300)
# self.animation.setStartValue(width)
# self.animation.setEndValue(extender)
# self.animation.setEasingCurve(QtCore.QEasingCurve.InOutQuart)
# self.animation.start()
####### Mause ile programı hareket ettirme
def mousePressEvent(self, event):
try:
if event.button() == Qt.LeftButton:
self.__press_pos = event.pos()
except:
pass
def mouseReleaseEvent(self, event):
try:
if event.button() == Qt.LeftButton:
self.__press_pos = None
except:
pass
def mouseMoveEvent(self, event):
try:
if self.__press_pos:
self.move(self.pos() + (event.pos() - self.__press_pos))
except:
pass
####### Veri Kaydetme
def cbmodel(self):
islem.execute("select UrunAciklamasi from UrunEkle")
self.liste = islem.fetchall()
self.liste.sort()
for x in self.liste:
self.ui.cbmodelekle.addItems(x)
def cboperator(self):
islem.execute("select OperatorKodu from OperatorEkle")
self.liste = islem.fetchall()
self.liste.sort()
for x in self.liste:
self.ui.cboperatorekle.addItems(x)
self.ui.cbortakisoperator.addItems(x)
## SHOW ==> MAIN WINDOW
self.show()
## ==> END ##
if __name__=="__main__":
app = QApplication(sys.argv)
screen = veri_gir()
screen.show()
sys.exit(app.exec_())
Çok Teşekkürler kardeşim Kendime göre uyarladım oldu sağulun