sameer
sameer

Reputation: 23

how to display the text in a textbox of different function of the same class in python

I am trying to get the date from a calendar widget to get printed into a textbox. The calendar widget and the textbox are in the same class but the print function is in a different function. all in the same class.

here is the code:

from PyQt5 import QtCore, QtGui, QtWidgets
import calendar

I have the printDate function to print the date

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

Here in this function i have the calendar widget and the textbox:

  def setupUi(self, MainWindow):

calendar widget:

    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)
    

textbox:

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

I get the calendar widget to open when button clicked. I also can get the date printed on python shell but cannot the date on the textbox. As soon as i click the date on the calendar widget the program closes itself. i dont get any error msg. I am new to programming and just started learning. Please help me

here is my whole code:

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

Upvotes: 0

Views: 618

Answers (1)

S. Nick
S. Nick

Reputation: 13681

Do not modify the code generated by Qt Designer but create another class that inherits from the appropriate widget and use the initial class to fill it.

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

enter image description here

Upvotes: 1

Related Questions