Я создаю простой проект Arduino.Основной целью моего проекта является отображение текста на ЖК-экране в зависимости от состояния PIN-кода (1 или 0).
Для этого я создаю простую форму и добавляю на нее метку.При запуске он показывает текст по умолчанию, но когда я нажимаю кнопку меню (имитировать PIN = 1), текст меняется на «WARNING_TEXT»
Вот мой код Python (это точка входа для моего приложения):
import sys
from forms import MainForm2
import os
from PyQt4.QtGui import *
def main():
app, window = MainForm2.init()
p = app.desktop().availableGeometry().center()
window.move(p.x()-window.width()*0.5,p.y()-window.height()*0.5)
window.setWindowTitle('Monitor') #<=Nazvanie app
window.showMaximized()
sys.exit(app.exec_())
if __name__ =="__main__":
main()
Код MainForm2 (вся логика приложения здесь):
# -*- coding: utf-8 -*-
from PyQt4 import QtGui,QtCore
from PyQt4.QtGui import QSizePolicy,QColor
import sys
import time
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 QMainWindow(QtGui.QMainWindow):
defaultStyle ='color:green;font-size:240px'
warningStyle ='color:red;text-align: justify;font-size:{0}px'
def __init__(self,parent=None):
super(QtGui.QMainWindow,self).__init__(parent)
self.cnfVacant = "Default text"
self.cnfBusy = "Warning text"
self.setupUi()
def setupUi(self):
self.thread=QMyThread()
#timer
self.timer = QtCore.QTimer()
self.timer.setInterval(1000)
self.timer.timeout.connect(self.displayTime)
self.main = QtGui.QWidget(self)
self.main.setAutoFillBackground(True)
p = self.main.palette()
p.setColor(self.main.backgroundRole(),QColor.fromRgb(0,0,0,255))
self.main.setPalette(p)
self.setCentralWidget(self.main)
self.menubar = QtGui.QMenuBar(self)
self.menubar.setGeometry(QtCore.QRect(0,0,559,25))
#trigger
self.menu_file_exit =QtGui.QAction(self.main)
self.menu_file_exit.setText("Exit")
self.menu_file_start = QtGui.QAction(self.main)
self.menu_file_start.setText("Start")
layout = QtGui.QGridLayout(self.main)
self.label = QtGui.QLabel("",self.main)
self.label.setText(_fromUtf8(self.cnfVacant.replace(" ","\n")))
self.label.setStyleSheet(self.defaultStyle)
self.label.setSizePolicy (QSizePolicy.Fixed,QSizePolicy.Expanding)
self.label.setSizePolicy (QSizePolicy.Fixed,QSizePolicy.Expanding)
layout.addWidget(self.label,10,10)
layout.addWidget(self.lbl,50,50)
self.connect(self.menu_file_exit, QtCore.SIGNAL('triggered()'), sys.exit)
self.connect(self.menu_file_start,QtCore.SIGNAL('triggered()'),self.thread.run)
QtCore.QObject.connect(self.thread,QtCore.SIGNAL('log(QString)'),self.tmp)
self.menu_file = self.menubar.addMenu("File")
self.menu_file.addAction(self.menu_file_start)
self.menu_file.addAction(self.menu_file_exit)
self.setMenuBar(self.menubar)
def tmp(self,s):
self.label.setText(_fromUtf8(self.cnfBusy))
self.label.setWordWrap(True)
self.label.setStyleSheet(self.warningStyle)
self.label.setStyleSheet(self.warningStyle.format(self.cnfWarning[0]))
print 'Hello sub {0}'.format(s)
def displayTime(self):
mDate=QtCore.QDateTime.currentDateTime().toString("dd.MM.yyyy")
mTime=QtCore.QDateTime.currentDateTime().toString("HH:mm:ss")
self.lbl.setText("{0} \n {1}".format(mDate,mTime))
class QMyThread(QtCore.QThread):
def __init__(self,parent=None):
super(QtCore.QThread,self).__init__(parent)
def run(self):
i=0
while True:
i=i+1
if(i==10):
self.setLog("Hello from thread")
time.sleep(0.3)
break
def setLog(self,text):
self.emit(QtCore.SIGNAL('log(QString)'),QtCore.QString(text))
def init():
app = QtGui.QApplication(sys.argv)
MainWindow =QMainWindow()
MainWindow.show()
return app, MainWindow
С этим кодом я получаю только одну метку с центром в форме, и с этим у меня две проблемы:
длинный текст отображается некорректно.Что-то вроде «бла бла блабла блаблабла бла»
Как получить вторую метку на форме в правом нижнем углу?
Хочуполучить аналогично, как на прилагаемой картинке:
Может кто-нибудь указать мне, как это сделать?