简体   繁体   English

PyQT4日期时间小部件

[英]PyQT4 Datetime widget

I'm using PyQt4 to make a Application and on the window their is a datetime-label( live updating). 我正在使用PyQt4制作应用程序,并且在窗口上是日期时间标签(实时更新)。 I Wan't to put this label into a Hboxlayout, together with two other QLabels. 我不想将这个标签与其他两个QLabel一起放入Hboxlayout。 This code is used: 使用此代码:

import sys,os
from PyQt4 import QtGui,QtCore
from label_datetime import *
class ApplicationWindow(QtGui.QMainWindow):
def __init__(self):

    QtGui.QMainWindow.__init__(self) 
    self.main_widget = QtGui.QWidget(self)

    layout=QtGui.QGridLayout(self.main_widget)
    layout.setSpacing(10)
    self.datetime=label_datetime()
    self.linkertitel=QtGui.QLabel('Uurbasis')
    self.rechtertitel=QtGui.QLabel('Dagbasis')
    qf=QtGui.QFont("Arial",20)
    self.linkertitel.setFont(qf)
    self.rechtertitel.setFont(qf)
    self.rechtertitel.setStyleSheet('color: #d3d3d3; border:1px solid rgb(0, 255, 0)')
    self.linkertitel.setStyleSheet('color: #d3d3d3; border:1px solid rgb(0, 255, 0)')
    self.linkertitel.setAlignment(QtCore.Qt.AlignCenter)
    self.rechtertitel.setAlignment(QtCore.Qt.AlignCenter)
    layout_titel=QtGui.QHBoxLayout()
    layout_titel.addWidget(self.linkertitel)
    layout_titel.addWidget(self.datetime)
    layout_titel.addWidget(self.rechtertitel)
    self.groep_titel=QtGui.QGroupBox()
    self.groep_titel.setLayout(layout_titel)
    layout.addWidget(self.groep_titel,1,1,1,10)
    self.main_widget.setFocus()
    self.setCentralWidget(self.main_widget)
    QtGui.QShortcut(QtGui.QKeySequence("Ctrl+Q"), self, self.close)

qApp = QtGui.QApplication(sys.argv)
aw = ApplicationWindow()
aw.setWindowTitle("my app")
aw.showFullScreen()
aw.show()
sys.exit(qApp.exec_())

And my code for the label_datetime: 而我的label_datetime代码:

from PyQt4 import QtGui,QtCore
from PyQt4.Qt import QFont, QColor
class label_datetime(QtGui.QWidget):
    def __init__(self):
        super(label_datetime,self).__init__()
        self.label = QtGui.QLabel('tijd',self)
        qf=QtGui.QFont("Arial",20)
        self.label.setFont(qf)
        self.label.setAlignment(QtCore.Qt.AlignCenter)        
        self.label.adjustSize()
        self.setStyleSheet('color: #d3d3d3; border:1px solid rgb(0, 255, 0)')
        timer=QtCore.QTimer(self)
        timer.timeout.connect(self.displaytime)
        timer.start(1000)
        self.show()
    def displaytime(self):
        tijd=QtCore.QDateTime.currentDateTime().toString()
        self.label.setText(QtCore.QDateTime.currentDateTime().toString())
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.adjustSize()

I want the three labels to be in the center of the given space. 我希望这三个标签位于给定空间的中心。 however this datetime label doesn't want to resize. 但是,此日期时间标签不想调整大小。 The result is this: 结果是这样的: 在此处输入图片说明

If I remove self.label.adjustSize(), and add: self.label.setSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding), the Qlabel shrinks and only half of the date is visibe.The size of my datetime lable doesn't want to change. 如果我删除self.label.adjustSize()并添加:self.label.setSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding),则Qlabel会缩小并且只有一半的日期是可见的。我datetime的大小标签不想改变。 Does someone know what I'm doing wrong ? 有人知道我在做什么错吗?

The problem is you're expecting a QtGui.Widget behaves as a QtGui.QLabel , your label_datetame class is not a QLabel , is a QWidget since its inherits from it. 问题是您期望QtGui.Widget表现为QtGui.QLabel ,您的label_datetame类不是QLabel ,而是QWidget因为它是从其继承的。

You should inherit your class from QLabel in order allow the other widgets ( QLayout , QWindow , etc...) "talk" to it the "QLabel languaje". 您应该从QLabel继承您的类,以便允许其他小部件( QLayoutQWindow等)“与”“ QLabel QWindow ”对话。 A QLabel has functions, methods and properties a QWidget hasn't. QLabel具有QWidget所没有的功能,方法和属性。

Change your class to this: 将您的班级更改为此:

class label_datetime(QtGui.QLabel):
    def __init__(self, parent=None):
        super(label_datetime,self).__init__(parent)
        qf = QtGui.QFont("Arial", 20)
        self.setFont(qf)
        self.setAlignment(QtCore.Qt.AlignCenter)        
        self.adjustSize()
        self.setStyleSheet('color: #d3d3d3; border:1px solid rgb(0, 255, 0)')
        timer = QtCore.QTimer(self)
        timer.timeout.connect(self.displaytime)
        timer.start(1000)
        self.show()

    def displaytime(self):
        tijd = QtCore.QDateTime.currentDateTime().toString()
        self.setText(QtCore.QDateTime.currentDateTime().toString())
        self.setAlignment(QtCore.Qt.AlignCenter)
        self.adjustSize()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM