Python 小部件上的PyQt标签定位
我创建了一个简单的arduino项目。我的项目的主要目的是基于PIN状态(1或0)在LCD屏幕上显示文本 为了达到这个目的,我创建了一个简单的表单并在上面添加了一个标签。启动时显示默认文本,但当我按下菜单按钮(模拟PIN=1)时,文本变为“警告文本” 这是我的Python代码(这是我的应用程序的入口点): 有了这段代码,我只得到一个以表单为中心的标签,因此我有两个问题:Python 小部件上的PyQt标签定位,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我创建了一个简单的arduino项目。我的项目的主要目的是基于PIN状态(1或0)在LCD屏幕上显示文本 为了达到这个目的,我创建了一个简单的表单并在上面添加了一个标签。启动时显示默认文本,但当我按下菜单按钮(模拟PIN=1)时,文本变为“警告文本” 这是我的Python代码(这是我的应用程序的入口点): 有了这段代码,我只得到一个以表单为中心的标签,因此我有两个问题: 长文本显示不正确。类似“呜呜呜呜呜呜呜呜” 如何在表单右下角获得第二个标签 我想在所附图片上看到类似的内容: 有人能告诉我怎
有人能告诉我怎么做吗?在讨论问题之前,我将指出您的代码可以有哪些改进:
- 不要使用旧的连接方式,请检查
- 如果不打算修改继承的类,则无需编写该类的构造函数
- 您不应该直接调用
的QThread
方法,否则任务将在主线程上运行,显然它不必发送,您必须调用run()
方法,这将在内部创建线程,并且start()
方法将在该线程上执行。请记住run()
不是一个线程,它是一个线程处理程序QThread
- 不要使用与继承的类名相同的类名,这可能会给您带来将来难以调试的问题
QLabel
,并使用setAlignment()
传递它,告诉它水平和垂直对焦
另一个QLabel
显示了您必须在几何体中手动移动它的时间,这必须在每次修改QLabel
时完成,因此我们使用resizeEvent
和更新文本的方法
# -*- coding: utf-8 -*-
import sys
import time
from PyQt4 import QtGui, QtCore
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)
defaultStyle ='color:green;font-size: 60px'
warningStyle ='color:red;text-align: justify;font-size:{0}px'
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
widget = QtGui.QWidget()
self.setCentralWidget(widget)
self.label = QtGui.QLabel("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae laoreet erat. Donec eleifend erat sapien. Morbi velit est, pellentesque vel fringilla eget, rhoncus nec sem. Curabitur rutrum sodales luctus. Nulla vel aliquam leo. Pellentesque non ante at nisl pulvinar posuere vel vel orci.")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setWordWrap(True)
self.label.setStyleSheet(defaultStyle)
pal = widget.palette()
pal.setColor(widget.backgroundRole(), QtGui.QColor.fromRgb(0,0,0,255))
widget.setPalette(pal)
widget.setAutoFillBackground(True)
self.lbl = QtGui.QLabel(widget)
self.lbl.setStyleSheet("*{color:green; font-size:48px}")
timer = QtCore.QTimer(self)
timer.timeout.connect(self.displayTime)
timer.start(1000)
self.displayTime()
menubar = QtGui.QMenuBar()
self.setMenuBar(menubar)
menu_file = menubar.addMenu("File")
menu_file_exit = menu_file.addAction("Exit")
menu_file_start = menu_file.addAction("Start")
menu_file_exit.triggered.connect(self.close)
self.mthread = QMyThread(self)
self.mthread.log.connect(self.fun)
menu_file_start.triggered.connect(self.mthread.start)
lay = QtGui.QVBoxLayout(widget)
lay.addWidget(self.label)
def fun(self, s):
self.label.setStyleSheet(warningStyle.format(100))
self.label.setText(s)
def displayTime(self):
text = QtCore.QDateTime.currentDateTime().toString("dd.MM.yyyy \n HH:mm:ss")
self.lbl.setText(_fromUtf8(text))
self.lbl.adjustSize()
self.adjustLabel()
def adjustLabel(self):
p = self.lbl.parent().rect().bottomRight() - self.lbl.rect().bottomRight()
self.lbl.move(p)
def resizeEvent(self, event):
QtGui.QMainWindow.resizeEvent(self, event)
self.adjustLabel()
class QMyThread(QtCore.QThread):
log = QtCore.pyqtSignal(QtCore.QString)
def run(self):
i=0
while True:
i+= 1
if i==10:
self.setLog("Hello from thread")
time.sleep(0.3)
break
def setLog(self,text):
self.log.emit(QtCore.QString(text))
def init():
app = QtGui.QApplication(sys.argv)
w = MainWindow()
w.show()
return app, w
什么是
self.lbl
和cnfWarning
?感谢您的帮助!你的解决方案对我非常有效!
# -*- 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
# -*- coding: utf-8 -*-
import sys
import time
from PyQt4 import QtGui, QtCore
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)
defaultStyle ='color:green;font-size: 60px'
warningStyle ='color:red;text-align: justify;font-size:{0}px'
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
widget = QtGui.QWidget()
self.setCentralWidget(widget)
self.label = QtGui.QLabel("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae laoreet erat. Donec eleifend erat sapien. Morbi velit est, pellentesque vel fringilla eget, rhoncus nec sem. Curabitur rutrum sodales luctus. Nulla vel aliquam leo. Pellentesque non ante at nisl pulvinar posuere vel vel orci.")
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.setWordWrap(True)
self.label.setStyleSheet(defaultStyle)
pal = widget.palette()
pal.setColor(widget.backgroundRole(), QtGui.QColor.fromRgb(0,0,0,255))
widget.setPalette(pal)
widget.setAutoFillBackground(True)
self.lbl = QtGui.QLabel(widget)
self.lbl.setStyleSheet("*{color:green; font-size:48px}")
timer = QtCore.QTimer(self)
timer.timeout.connect(self.displayTime)
timer.start(1000)
self.displayTime()
menubar = QtGui.QMenuBar()
self.setMenuBar(menubar)
menu_file = menubar.addMenu("File")
menu_file_exit = menu_file.addAction("Exit")
menu_file_start = menu_file.addAction("Start")
menu_file_exit.triggered.connect(self.close)
self.mthread = QMyThread(self)
self.mthread.log.connect(self.fun)
menu_file_start.triggered.connect(self.mthread.start)
lay = QtGui.QVBoxLayout(widget)
lay.addWidget(self.label)
def fun(self, s):
self.label.setStyleSheet(warningStyle.format(100))
self.label.setText(s)
def displayTime(self):
text = QtCore.QDateTime.currentDateTime().toString("dd.MM.yyyy \n HH:mm:ss")
self.lbl.setText(_fromUtf8(text))
self.lbl.adjustSize()
self.adjustLabel()
def adjustLabel(self):
p = self.lbl.parent().rect().bottomRight() - self.lbl.rect().bottomRight()
self.lbl.move(p)
def resizeEvent(self, event):
QtGui.QMainWindow.resizeEvent(self, event)
self.adjustLabel()
class QMyThread(QtCore.QThread):
log = QtCore.pyqtSignal(QtCore.QString)
def run(self):
i=0
while True:
i+= 1
if i==10:
self.setLog("Hello from thread")
time.sleep(0.3)
break
def setLog(self,text):
self.log.emit(QtCore.QString(text))
def init():
app = QtGui.QApplication(sys.argv)
w = MainWindow()
w.show()
return app, w