【发布时间】:2018-06-25 21:55:30
【问题描述】:
我创建了一个简单的 arduino 项目。我项目的主要目的是根据 PIN 状态(1 或 0)在 LCD 屏幕上显示文本。
为此,我创建了一个简单的表单并在其上添加了一个标签。启动时显示默认文本,但当我按下菜单按钮(模拟 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
使用这段代码,我只得到一个以表格为中心的标签,我有两个问题:
长文本显示不正确。类似“bla bla blabla blablabla bla”的东西
如何获取表单右下角的第二个标签?
我想得到类似的图片:
有人能指点我吗,该怎么做?
【问题讨论】:
-
self.lbl和cnfWarning是什么?