2015-05-05 3 views
0

Я использую PyQt4 для создания приложения, а в окне их - метка datetime (живое обновление). Я не помещал этот ярлык в Hboxlayout вместе с двумя другими QLabels. Этот код используется:PyQT4 Datetime widget

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_()) 

И мой код 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() 

Я хочу, чтобы три метки, чтобы быть в центре данного пространства. однако этот ярлык datetime не хочет изменять размер. Результат таков: enter image description here

Если удалить self.label.adjustSize(), и добавить: self.label.setSizePolicy (QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding), то QLabel сжимается и только половина от даты - visibe. Размер моей базы данных datetime не хочет меняться. Кто-нибудь знает, что я делаю неправильно?

ответ

1

Проблема в том, вы ожидаете QtGui.Widget ведет себя как QtGui.QLabel, ваш label_datetame класс не QLabel, является QWidget с момента его наследует от него.

Вы должны наследовать свой класс от QLabel для того, чтобы другие виджеты (QLayout, QWindow, и т.д ...) «поговорить» с ней «QLabel Languaje». A QLabel имеет функции, методы и свойства a QWidget не имеет.

Измените класс следующим образом:

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() 
Смежные вопросы