Я пытаюсь управлять двумя MainWindow (MainWindow & AccessWindow) с PyQt для моего проекта RFID ACCESS CONTROL. Я хочу показать первый MainWindow все время (Endless Loop). Затем я хочу скрыть его и показать второй MainWindow, когда считыватель RFID (который работает в режиме автоматического чтения) считывает метку RFID. поэтому в основной программе python у меня есть псевдо-цикл «do while» (в то время как True: и break with a condition), чтобы читать на последовательном порту данные, предоставленные читателем. Тогда я проверяю БД .. Это не важно. . Таким образом, событие триггера «, когда читатель что-то читал) я получил некоторую помощь от другого форума, и теперь у меня есть это:PyQt: Управление двумя MainWindow
# -*- coding: utf-8 -*-
from PyQt4 import QtCore, QtGui
import sys, pyodbc, serial
import os
import time
#Variables
Code_Zone = "d"
class MainWindow(QtGui.QWidget):
def __init__(self, main):
super(MainWindow, self).__init__()
self.main = main
self.grid = QtGui.QGridLayout(self)
self.welcome = QtGui.QLabel("WELCOME", self)
self.grid.addWidget(self.welcome, 2, 2, 1, 5)
class AccessWindow(QtGui.QWidget):
def __init__(self):
super(AccessWindow, self).__init__()
self.setMinimumSize(150, 50)
self.grid = QtGui.QGridLayout(self)
self.label = QtGui.QLabel(self)
self.grid.addWidget(self.label, 1, 1, 1, 1)
class Main(object):
def __init__(self):
self.accueil = MainWindow(self)
self.accueil.show()
self.access = AccessWindow()
def wait(self):
# RFID READER ENDLESS LOOP
while 1:
global EPC_Code
ser = serial.Serial(port='COM6', baudrate=115200)
a = ser.read(19).encode('hex')
if (len(a)==38):
EPC_Code = a[14:]
print ('EPC is : ' + EPC_Code)
break
else:
continue
ser.close()
self.on_event(EPC_Code)
def on_event(self, data):
def refresh():
self.toggle_widget(False)
self.wait()
# vérification des données
EPC_Code = data
sql_command = "[Get_Access_RFID] @Code_RFID = '"+EPC_Code+"', @Code_Zone = '"+Code_Zone+"'" # STORED PROCEDURE
db_cursor.execute(sql_command)
rows = db_cursor.fetchone()
result= str(rows[0])
print ("result = " + str(result))
if result == "True":
# si OK
self.access.label.setText('ACCESS GRANTED')
else:
# si pas OK
self.access.label.setText('ACCESS DENIED')
self.toggle_widget(True)
QtCore.QTimer.singleShot(2000, refresh)
def toggle_widget(self, b):
self.accueil.setVisible(not b)
self.access.setVisible(b)
if __name__=='__main__':
cnxn = """DRIVER={SQL Server};SERVER=***;PORT=***;UID=***;PWD=***;DATABASE=***"""
db_connection = pyodbc.connect(cnxn)
db_cursor = db_connection.cursor()
print ('Connected TO DB & READY')
app = QtGui.QApplication(sys.argv)
main = Main()
main.wait()
sys.exit(app.exec_())
и теперь моя проблема заключается в том, что текст первого окна не отображается когда я запускаю программу, но текст второго окна появляется, когда я держать свой значок рядом с RFID Reader.
Привет, Аарон, вы можете показать мне, как перемещать события обработки RFID в фоновом потоке. Я начинаю в PyQt, и я не знаю знаю, как .. я проверил две ссылки, но я ничего не понял .. Я застрял с 3 дней .. Мне действительно нужна твоя помощь! –
Этот веб-сайт не касается написания кода для вас, это вопрос о том, что вы задаете вопросы, пока не сможете сами написать код :-) Пожалуйста, снова прочитайте статьи и начните задавать вопросы, когда вы не понимаете слова или концепцию. –
С уважением, я не понимаю ваше примечание. –