我创建一个简单的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”之类的东西
如何在右下角的表单上获取第二个标签?
我想在附图上得到类似的图像:
有人可以指出我该怎么做吗?
答案 0 :(得分:2)
在解决问题之前,我将指出您的代码可以进行的改进:
run()
的{{1}}方法,否则任务将在主线程上运行,并且显然不必发送,您必须调用{{1} }方法,它将在内部创建线程,并且QThread
方法将在该线程上执行。请记住,start()
不是线程,而是线程处理程序。至此,仅需使用布局建立第一个run()
,并使用QThread
将其居中,并传递QLabel
,告诉它水平和垂直聚焦
另一个setAlignment()
表示您必须手动在几何中移动它的时间,每次修改QtCore.Qt.AlignCenter
时都必须这样做,因此我们使用QLabel
和方法更新文本。
QLabel