Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 小部件上的PyQt标签定位_Python_Pyqt_Pyqt4 - Fatal编程技术网

Python 小部件上的PyQt标签定位

Python 小部件上的PyQt标签定位,python,pyqt,pyqt4,Python,Pyqt,Pyqt4,我创建了一个简单的arduino项目。我的项目的主要目的是基于PIN状态(1或0)在LCD屏幕上显示文本 为了达到这个目的,我创建了一个简单的表单并在上面添加了一个标签。启动时显示默认文本,但当我按下菜单按钮(模拟PIN=1)时,文本变为“警告文本” 这是我的Python代码(这是我的应用程序的入口点): 有了这段代码,我只得到一个以表单为中心的标签,因此我有两个问题: 长文本显示不正确。类似“呜呜呜呜呜呜呜呜” 如何在表单右下角获得第二个标签 我想在所附图片上看到类似的内容: 有人能告诉我怎

我创建了一个简单的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