0

i was wondering if it possible using QMessagBox in Qmainwindow.

i am getting this error:

Traceback (most recent call last): File "C:\Users\royqb\desktop\python_learning\softwaremgmt\table.py", line 229, in refresh_warning msg.question(self,'Warning', 'Are you sure to continue?',msg.Yes | msg.No) TypeError: question(QWidget, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.StandardButtons(QMessageBox.Yes|QMessageBox.No), defaultButton: QMessageBox.StandardButton = QMessageBox.NoButton): argument 1 has unexpected type 'Ui_MainWindow'

in other window which is Qdialog it works just fine. please help :)

import sqlite3
import smtplib
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *
from PyQt5.QtSql import *
from PyQt5.QtGui import *
from newlogin import *

class Ui_MainWindow(object):
    # def __init__(self):
    #     self.connect = sqlite3.connect('lics.db')
    #     self.cur = self.connect.cursor()

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setEnabled(True)
        # MainWindow.resize(1250, 800)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        # self.setWindowTitle('Licenses')

        self.new_lic_button = QtWidgets.QPushButton(self.centralwidget)
        self.new_lic_button.setGeometry(QtCore.QRect(10, 80, 150, 40))
        self.new_lic_button.setStyleSheet("QPushButton#new_lic_button{\n"
"background-color:lightgrey;\n"
"border-radius:5px;\n"
"color:grey;\n"
"border:1px solid darkgrey;\n"
"}\n"
"QPushButton#new_lic_button:pressed{\n"
"background-color:rgba(148, 151, 150, 0.8);\n"
"}\n"
"QPushButton#new_lic_button:hover{\n"
"background-color:rgba(223, 223, 223, 0.8);\n"
"color:rgba(89, 93, 92, 0.8);\n"
"}\n"
"")
        self.new_lic_button.setObjectName("ref_data")
        self.send_mail_button = QtWidgets.QPushButton(self.centralwidget)
        self.send_mail_button.setGeometry(QtCore.QRect(170, 80, 150, 40))
        self.send_mail_button.setStyleSheet("QPushButton#send_mail_button{\n"
"background-color:lightgrey;\n"
"border-radius:5px;\n"
"color:grey;\n"
"border:1px solid darkgrey;\n"
"}\n"
"QPushButton#send_mail_button:pressed{\n"
"background-color:rgba(148, 151, 150, 0.8);\n"
"}\n"
"QPushButton#send_mail_button:hover{\n"
"background-color:rgba(223, 223, 223, 0.8);\n"
"color:rgba(89, 93, 92, 0.8);\n"
"}\n"
"")
        self.send_mail_button.setObjectName("sub_change")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(10, 150, 1700, 900))
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.tableWidget.sizePolicy().hasHeightForWidth())
        self.tableWidget.setSizePolicy(sizePolicy)
        self.tableWidget.setStyleSheet("background-color:rgba(246, 246, 246, 0.8)")
        self.tableWidget.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.tableWidget.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.tableWidget.setLineWidth(1)
        self.tableWidget.setWordWrap(True)
        self.tableWidget.setRowCount(0)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(8)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        item.setBackground(QtGui.QColor(230, 230, 230))
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        item.setBackground(QtGui.QColor(230, 230, 230))
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        item.setBackground(QtGui.QColor(230, 230, 230))
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        item.setBackground(QtGui.QColor(230, 230, 230))
        self.tableWidget.setHorizontalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        item.setBackground(QtGui.QColor(230, 230, 230))
        self.tableWidget.setHorizontalHeaderItem(4, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        item.setBackground(QtGui.QColor(230, 230, 230))
        self.tableWidget.setHorizontalHeaderItem(5, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        self.tableWidget.setHorizontalHeaderItem(6, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(8)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        self.tableWidget.setHorizontalHeaderItem(7, item)
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(750, 10, 280, 51))
        font = QtGui.QFont()
        font.setFamily("Segoe script")
        font.setPointSize(10)
        self.label.setFont(font)
        self.label.setStyleSheet("text-size:20px;")
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.widget = QtWidgets.QWidget(self.centralwidget)
        self.widget.setGeometry(QtCore.QRect(0, 0, 1920, 1000))
        self.widget.setStyleSheet("border-radius:20px;\n"
"background-color:rgb(187, 247, 228,0.8);")
        self.widget.setObjectName("widget")
        self.widget.raise_()
        self.new_lic_button.raise_()
        self.send_mail_button.raise_()
        self.tableWidget.raise_()
        self.label.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1016, 22))
        self.menubar.setObjectName("menubar")
        self.menuFile = QtWidgets.QMenu(self.menubar)
        self.menuFile.setObjectName("menuFile")
        self.menuEfit = QtWidgets.QMenu(self.menubar)
        self.menuEfit.setObjectName("menuEfit")
        MainWindow.setMenuBar(self.menubar)
        self.toolBar = QtWidgets.QToolBar(MainWindow)
        self.toolBar.setObjectName("toolBar")
        MainWindow.addToolBar(QtCore.Qt.LeftToolBarArea, self.toolBar)
        self.actionShow_All = QtWidgets.QAction(MainWindow)
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("pic/icons/show.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionShow_All.setIcon(icon3)
        self.actionShow_All.setObjectName("actionShow_All")
        self.actionExport_xlsx = QtWidgets.QAction(MainWindow)
        self.actionExport_xlsx.setObjectName("actionExport_xlsx")
        self.actionExport_Xlsx = QtWidgets.QAction(MainWindow)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("pic/icons/xlsx.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionExport_Xlsx.setIcon(icon)
        self.actionExport_Xlsx.setObjectName("actionExport_Xlsx")
        self.actionEmail = QtWidgets.QAction(MainWindow)
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("pic/icons/mail.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionEmail.setIcon(icon1)
        self.actionEmail.setObjectName("actionEmail")
        self.actionNew_License = QtWidgets.QAction(MainWindow)
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("pic/icons/plus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionNew_License.setIcon(icon2)
        self.actionNew_License.setObjectName("actionNew_License")
        self.menuFile.addAction(self.actionExport_xlsx)
        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuEfit.menuAction())
        self.toolBar.addAction(self.actionNew_License)
        self.toolBar.addAction(self.actionExport_Xlsx)
        self.toolBar.addAction(self.actionEmail)
        self.toolBar.addAction(self.actionShow_All)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
        #send mail from tool bar
        self.actionEmail.triggered.connect(self.send_mail)
        #table width
        MainWindow.setGeometry(QtCore.QRect(10, 100, 1920, 900))
        self.tableWidget.setColumnWidth(0, 180)
        self.tableWidget.setColumnWidth(1, 250)
        self.tableWidget.setColumnWidth(2, 250)
        self.tableWidget.setColumnWidth(3, 100)
        self.tableWidget.setColumnWidth(4, 150)
        self.tableWidget.setColumnWidth(5, 150)
        self.tableWidget.setColumnWidth(6, 100)
        self.tableWidget.setColumnWidth(7, 500)
        self.tableWidget.setHorizontalHeaderLabels(
            ['Company', 'License type', 'Supplier', 'Interval', 'Last update', 'Next update', 'Time left'])
        self.loaddata()

        self.new_lic_button.clicked.connect(self.refresh_warning)
        # self.send_mail_button.clicked.connect(self.submit_changes)
    def refresh_warning(self):
        msg = QMessageBox()
        # msg.setWindowTitle(self,"Warning")
        # msg.setText(self, 'Any changes you made will be lost!')
        msg.question(self,'Warning', 'Are you sure to continue?',msg.Yes | msg.No)
        msg.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
        msg.exec_()
        if self.new_lic_button.clicked:
            ask = MainWindow.QMessageBox.question(MainWindow,"If you made changes they will be lost! \nUse 'Submit Changes' button to save your changes, continue?",QMessageBox.Yes|QMessageBox.No)
            if ask == QMessageBox.Yes:
                self.loaddata()

    def loaddata(self):
        connect = sqlite3.connect('lics.db')
        cur = connect.cursor()
        sqlquery = ('select company,lic_name,supplier, frequency,last_update, next_update, time_left, lic_path from licenses  WHERE time_left_int < 30 order by time_left_int asc ')
        cur.execute(sqlquery)
        rows = cur.fetchall()
        self.tableWidget.setRowCount(len(rows))
        tablerow = 0
        for row in cur.execute(sqlquery):
            self.tableWidget.setItem(tablerow, 0, QtWidgets.QTableWidgetItem(row[0]))
            self.tableWidget.setItem(tablerow, 1, QtWidgets.QTableWidgetItem(row[1]))
            self.tableWidget.setItem(tablerow, 2, QtWidgets.QTableWidgetItem(row[2]))
            self.tableWidget.setItem(tablerow, 3, QtWidgets.QTableWidgetItem(row[3]))
            self.tableWidget.setItem(tablerow, 4, QtWidgets.QTableWidgetItem(row[4]))
            self.tableWidget.setItem(tablerow, 5, QtWidgets.QTableWidgetItem(row[5]))
            self.tableWidget.setItem(tablerow, 6, QtWidgets.QTableWidgetItem(row[6]))
            self.tableWidget.setItem(tablerow, 7, QtWidgets.QTableWidgetItem(row[7]))
            tablerow +=1

    def send_mail(self):
        self.ui2 = Ui_login_page()
        user = self.ui2.hashed_user
        # print(user)
        connect = sqlite3.connect('lics.db')
        cur = connect.cursor()
        # emailsql = ("select email from users where user = '{}' ".format(user))
        # print(emailsql)
        smtp_sslobj = smtplib.SMTP_SSL('smtp.gmail.com',465)
        smtp_sslobj.ehlo()
        # smtp_sslobj.starttls()
        sent_from = "pythroy@gmail.com"
        # self.to_mail = ""
        gmail_user = sent_from
        sqlq= ('select email_pass from users where email = "{}" '.format(self.to_mail))
        gmail_pass = '1qa1qa1qa'
            # cur.execute(sqlq)
        # print(gmail_pass)
        smtp_sslobj.login(sent_from,gmail_pass)
        to = self.to_mail
        subject ="Expiring licenses"
        body = "hello"
        smtp_sslobj.sendmail(sent_from, self.to_mail,"hello" )
        smtp_sslobj.close()


    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.new_lic_button.setText(_translate("MainWindow", "Refresh Data"))
        self.send_mail_button.setText(_translate("MainWindow", "Submit Changes"))
        self.tableWidget.setSortingEnabled(True)
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "Company"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "Lic name"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("MainWindow", "Supplier"))
        item = self.tableWidget.horizontalHeaderItem(3)
        item.setText(_translate("MainWindow", "Interval"))
        item = self.tableWidget.horizontalHeaderItem(4)
        item.setText(_translate("MainWindow", "Last update"))
        item = self.tableWidget.horizontalHeaderItem(5)
        item.setText(_translate("MainWindow", "Next update"))
        item = self.tableWidget.horizontalHeaderItem(6)
        item.setText(_translate("MainWindow", "Time left"))
        item = self.tableWidget.horizontalHeaderItem(7)
        item.setText(_translate("MainWindow", "Path"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\"><span style=\" font-size:14pt; font-weight:600; text-decoration: underline;\">Expiring Licenses</span></p></body></html>"))
        self.menuFile.setTitle(_translate("MainWindow", "File"))
        self.menuEfit.setTitle(_translate("MainWindow", "Edit"))
        self.toolBar.setWindowTitle(_translate("MainWindow", "toolBar"))
        self.actionExport_xlsx.setText(_translate("MainWindow", "Export xlsx"))
        self.actionExport_Xlsx.setText(_translate("MainWindow", "Export Xlsx"))
        self.actionExport_Xlsx.setToolTip(_translate("MainWindow", "Export to xlsx"))
        self.actionExport_Xlsx.setStatusTip(_translate("MainWindow", "Export to xlsx"))
        self.actionEmail.setText(_translate("MainWindow", "Email"))
        self.actionEmail.setToolTip(_translate("MainWindow", "Send mail"))
        self.actionEmail.setStatusTip(_translate("MainWindow", "Send mail"))
        self.actionNew_License.setText(_translate("MainWindow", "New License"))
        self.actionNew_License.setStatusTip(_translate("MainWindow", "Insert new license"))
        self.actionNew_License.setWhatsThis(_translate("MainWindow", "New license"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())
roy
  • 1
  • You shall **never** edit pyuic files, it's considered bad practice and it creates more issues (like yours) than benefits (which are mostly none). Please follow the official guidelines about [using Designer](https://www.riverbankcomputing.com/static/Docs/PyQt5/designer.html). – musicamante Apr 08 '22 at 14:37

1 Answers1

0

QMessageBox.questions first argument must be QWidget or None, Ui_MainWindow (self) is not a widget, it's a helper class not inherited from QWidget, use self.widget instead.

mugiseyebrows
  • 4,138
  • 1
  • 14
  • 15