【问题标题】:how to display the text in a textbox of different function of the same class in python如何在python中同一类的不同函数的文本框中显示文本
【发布时间】:2020-10-23 20:40:01
【问题描述】:

我正在尝试从日历小部件中获取日期以打印到文本框中。日历小部件和文本框在同一个类中,但打印功能在不同的功能中。都在同一个班级。

代码如下:

from PyQt5 import QtCore, QtGui, QtWidgets
import calendar

我有 printDate 函数来打印日期

class Ui_Calendar(object):
  def printDate(self, qDate):
    date =('{0}-{1}-{2}'.format(qDate.month(), qDate.day(), qDate.year()))
    self.setupUi.textedit.setText(date)

在这个函数中,我有日历小部件和文本框:

  def setupUi(self, MainWindow):

日历小部件:

    self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
    self.calendarWidget.setGeometry(QtCore.QRect(0, 0, 392, 236))
    self.calendarWidget.setObjectName("calendarWidget")
    self.calendarWidget.clicked.connect(self.printDate)
    

文本框:

    self.textedit = QtWidgets.QLineEdit(self.centralwidget)
    self.textedit.setGeometry(QtCore.QRect(20,245,80,30))
    self.textedit.setObjectName("textedit")

单击按钮时,我可以打开日历小部件。我也可以在 python shell 上打印日期,但不能在文本框上打印日期。一旦我单击日历小部件上的日期,程序就会自行关闭。我没有收到任何错误消息。 我是编程新手,刚开始学习。请帮帮我

这是我的全部代码:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Calendar(object):
  def printDate(self, qDate):
    date =('{0}-{1}-{2}'.format(qDate.month(), qDate.day(), qDate.year()))
    #print(date)
    self.setupUi.textedit.setText(self.date.toStrings())

def setupUi(self, MainWindow):
    MainWindow.setObjectName("MainWindow")
    MainWindow.resize(395, 310)
    self.centralwidget = QtWidgets.QWidget(MainWindow)
    self.centralwidget.setObjectName("centralwidget")
    self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
    self.calendarWidget.setGeometry(QtCore.QRect(0, 0, 392, 236))
    self.calendarWidget.setObjectName("calendarWidget")
    #self.calendarWidget.clicked.connect(lambda dateval:print(dateval))
    self.calendarWidget.clicked.connect(self.printDate)
    
    MainWindow.setCentralWidget(self.centralwidget)
    
    self.textedit = QtWidgets.QLineEdit(self.centralwidget)
    self.textedit.setGeometry(QtCore.QRect(20,245,80,30))
    self.textedit.setObjectName("textedit")
    #self.printDate(self.label.setText(date))
    
    
    
    
    self.statusbar = QtWidgets.QStatusBar(MainWindow)
    self.statusbar.setObjectName("statusbar")
    MainWindow.setStatusBar(self.statusbar)

    self.retranslateUi(MainWindow)
    QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):
    _translate = QtCore.QCoreApplication.translate
    MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
    #self.label.setText(_translate("Mainwindow","date"))


 if __name__ == "__main__":
  import sys
  app = QtWidgets.QApplication(sys.argv)
  MainWindow = QtWidgets.QMainWindow()
  ui = Ui_Calendar()
  ui.setupUi(MainWindow)
  MainWindow.show()
  sys.exit(app.exec_())

【问题讨论】:

  • 我刚刚编辑了代码部分,以便在有帮助的情况下更具可读性。
  • 发布所有你拥有的代码,而不是单独的块。
  • @S.Nick 在这里我再次编辑了我的整个代码。一切正常,除了 printDate 函数中的self.setupUi.textedit.setText(self.date.toStrings())
  • 您的代码有太多问题。好吧,刚刚有人发布了答案,现在你必须得到它。

标签: python pyqt5


【解决方案1】:

不要修改 Qt Designer 生成的代码,而是创建另一个继承的类 来自适当的小部件并使用初始类来填充它。

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Calendar(object):
#    def printDate(self, qDate):
#        date =('{0}-{1}-{2}'.format(qDate.month(), qDate.day(), qDate.year()))
#        #print(date)
#        self.setupUi.textedit.setText(self.date.toStrings())

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(395, 310)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget)
        self.calendarWidget.setGeometry(QtCore.QRect(0, 0, 392, 236))
        self.calendarWidget.setObjectName("calendarWidget")
        #self.calendarWidget.clicked.connect(lambda dateval:print(dateval))
#        self.calendarWidget.clicked.connect(self.printDate)
        
        MainWindow.setCentralWidget(self.centralwidget)
        
        self.textedit = QtWidgets.QLineEdit(self.centralwidget)
        self.textedit.setGeometry(QtCore.QRect(20,245,80,30))
        self.textedit.setObjectName("textedit")
        #self.printDate(self.label.setText(date))
        
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        #self.label.setText(_translate("Mainwindow","date"))


class Calendar(QtWidgets.QMainWindow, Ui_Calendar):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.calendarWidget.clicked.connect(self.printDate)

    def printDate(self, qDate):
        date =('{0}-{1}-{2}'.format(qDate.month(), qDate.day(), qDate.year()))
        
#        self.setupUi.textedit.setText(self.date.toStrings())
        self.textedit.setText(date)
        

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
#    MainWindow = QtWidgets.QMainWindow()
#    ui = Ui_Calendar()
#    ui.setupUi(MainWindow)
#    MainWindow.show()

    w = Calendar()
    w.show()
    sys.exit(app.exec_())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多