Trying to make my first Gui in Python and having a hard time. I made something in designer:
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_ConfigAssign(object):
def setupUi(self, ConfigAssign):
ConfigAssign.setObjectName("ConfigAssign")
ConfigAssign.resize(750, 479)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("exc.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
ConfigAssign.setWindowIcon(icon)
ConfigAssign.setAutoFillBackground(False)
ConfigAssign.setStyleSheet("")
self.centralwidget = QtWidgets.QWidget(ConfigAssign)
self.centralwidget.setObjectName("centralwidget")
self.formLayout = QtWidgets.QFormLayout(self.centralwidget)
self.formLayout.setObjectName("formLayout")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Roboto")
font.setPointSize(22)
self.label_2.setFont(font)
self.label_2.setLayoutDirection(QtCore.Qt.LeftToRight)
self.label_2.setObjectName("label_2")
self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.label_2)
self.label = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Roboto")
font.setPointSize(12)
self.label.setFont(font)
self.label.setObjectName("label")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.label)
self.customerlistbox = QtWidgets.QComboBox(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Roboto")
font.setPointSize(12)
self.customerlistbox.setFont(font)
self.customerlistbox.setMaxVisibleItems(20)
self.customerlistbox.setObjectName("customerlistbox")
self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.customerlistbox)
self.label_3 = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Roboto")
font.setPointSize(12)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.label_3)
self.ImportMapButton = QtWidgets.QPushButton(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Roboto")
font.setPointSize(12)
self.ImportMapButton.setFont(font)
self.ImportMapButton.setObjectName("ImportMapButton")
self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.ImportMapButton)
self.label_4 = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setFamily("Roboto")
font.setPointSize(12)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.formLayout.setWidget(3, QtWidgets.QFormLayout.LabelRole, self.label_4)
ConfigAssign.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(ConfigAssign)
self.statusbar.setObjectName("statusbar")
ConfigAssign.setStatusBar(self.statusbar)
self.actionQuit = QtWidgets.QAction(ConfigAssign)
self.actionQuit.setObjectName("actionQuit")
self.retranslateUi(ConfigAssign)
QtCore.QMetaObject.connectSlotsByName(ConfigAssign)
def retranslateUi(self, ConfigAssign):
_translate = QtCore.QCoreApplication.translate
ConfigAssign.setWindowTitle(_translate("ConfigAssign", "Configuration Assignment"))
self.label_2.setText(_translate("ConfigAssign", "CONFIG ASSIGNMENT"))
self.label.setText(_translate("ConfigAssign", "Select Client:"))
self.label_3.setText(_translate("ConfigAssign", "Import CSMConfig Map"))
self.ImportMapButton.setText(_translate("ConfigAssign", "Browse For Excel File"))
self.label_4.setText(_translate("ConfigAssign", "Create and Export Dim Assign File"))
self.actionQuit.setText(_translate("ConfigAssign", "Quit"))
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
ConfigAssign = QtWidgets.QMainWindow()
ui = Ui_ConfigAssign()
ui.setupUi(ConfigAssign)
ConfigAssign.show()
sys.exit(app.exec_())
And I'm having a hard time connecting all the widgets to code and make things show up and behave properly.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog
from config_assign_ui import Ui_ConfigAssign
import pyodbc
import pandas as pd
class Main(QtWidgets.QMainWindow):
#class Window(Ui_ConfigAssign):
def __init__(self):
Ui_ConfigAssign.__init__(self)
self.setupUi(self)
self.combo_list()
self.ImportMapButton.clicked.connect(lambda: self.import_map())
def combo_list(self):
self.customerlistbox.clear()
conn = pyodbc.connect(
r'DRIVER={ODBC Driver 13 for SQL Server};'
r'SERVER=server;'
r'DATABASE=db;'
r'Trusted_Connection=yes;'
)
querystring = """SELECT CustomerName FROM [table]
WHERE Column = 'Active' ORDER BY Column"""
cursor = conn.cursor()
cursor.execute(querystring)
customerlist = []
# Dump results into a list called customerlist
customerlist = [row[0] for row in cursor.fetchall()]
for i in customerlist:
self.customerlistbox.addItem(str(i))
def import_map(self):
name = QtGui.QFileDialog.getOpenFileName(self, "Open CSMConfig Map...", "T:\\Drive\",
"Worksheets (*.xlsx,*.xlsm,*.xlsb,*.xls)")
file = open(name, 'r')
with file:
xl = pd.ExcelFile(file)
df = xl.parse('Sheet1')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = Main()
window.show()
sys.exit(app.exec_())
I had an earlier version that worked with just the combo box listing out all the customers. As I add more functionality, I am going back to designer to add a piece, reuse pyuic5, then go back to the code and attempt to make it do what I want. The last part with the dialog box hasn't worked yet either. But for now, I can't get the application to start up due to the error in the title of this post.
Any help would be appreciated.