I was trying to keep my code somewhat organized and I ran into a slight problem and I'm hoping I won't have to restructure it too much. I have two files. MainWindow and ModuleWindows.
Looking at the ModuleWindows file, currently function SearchHardware() under the Ui_SearchWindow class is setup just for testing pulling data and printing it just disregard for now. The goal for this function though is simple when the user enters a serial number and clicks the search button it will pull that row from the database and display it in the QTableWidget on the MainWindow file.
I'm not exactly sure the best way to go about this or if it's even possible. When SearchHardware() is called, how am I going to get that data to display on the QTableWidget in the MainWindow file?
I feel like since this function isn't being called from the MainWindow and passing the users input as arguments it isn't possible. I'm going to need to throw the Ui_SearchWindow class and SearchWindow() function in the MainWindow file?
MainWindow:
Looking at the ModuleWindows file, currently function SearchHardware() under the Ui_SearchWindow class is setup just for testing pulling data and printing it just disregard for now. The goal for this function though is simple when the user enters a serial number and clicks the search button it will pull that row from the database and display it in the QTableWidget on the MainWindow file.
I'm not exactly sure the best way to go about this or if it's even possible. When SearchHardware() is called, how am I going to get that data to display on the QTableWidget in the MainWindow file?
I feel like since this function isn't being called from the MainWindow and passing the users input as arguments it isn't possible. I'm going to need to throw the Ui_SearchWindow class and SearchWindow() function in the MainWindow file?
MainWindow:
from PyQt5 import QtCore, QtGui, QtWidgets from ModuleWindows import Ui_NewHardwareWindow from ModuleWindows import Ui_SearchWindow import sys class Ui_MainWindow(object): def ShowNewHardwareWindow(self): self.window = QtWidgets.QMainWindow() self.ui = Ui_NewHardwareWindow() self.ui.setupUi(self.window) self.window.show() def ShowSearchWindow(self): self.window = QtWidgets.QMainWindow() self.ui = Ui_SearchWindow() self.ui.setupUi(self.window) self.window.show() def SetupUi(self, MainWindow): super().__init__() MainWindow.setObjectName("MainWindow") MainWindow.setWindowTitle("Hardware Inventory") MainWindow.setWindowModality(QtCore.Qt.NonModal) MainWindow.resize(900, 300) MainWindow.setMaximumSize(QtCore.QSize(900, 300)) MainWindow.setMinimumSize(QtCore.QSize(900, 300)) MainWindow.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor)) MainWindow.setTabletTracking(False) MainWindow.setAutoFillBackground(False) MainWindow.setStyleSheet('') MainWindow.setToolButtonStyle(QtCore.Qt.ToolButtonFollowStyle) MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded) font = QtGui.QFont() font.setFamily("MS UI Gothic") font.setPointSize(9) self.CentralWidget = QtWidgets.QWidget(MainWindow) self.CentralWidget.setObjectName("CentralWidget") self.TableWidget = QtWidgets.QTableWidget(self.CentralWidget) self.TableWidget.setGeometry(QtCore.QRect(120, 10, 770, 300)) self.TableWidget.setRowCount(5) self.TableWidget.setColumnCount(5) self.TableWidget.setObjectName("TableWidget") item = QtWidgets.QTableWidgetItem() self.TableWidget.setHorizontalHeaderItem(0, item) item = QtWidgets.QTableWidgetItem() self.TableWidget.setHorizontalHeaderItem(1, item) item = QtWidgets.QTableWidgetItem() self.TableWidget.setHorizontalHeaderItem(2, item) item = QtWidgets.QTableWidgetItem() self.TableWidget.setHorizontalHeaderItem(3, item) item = QtWidgets.QTableWidgetItem() self.TableWidget.setHorizontalHeaderItem(4, item) item = self.TableWidget.horizontalHeaderItem(0) item.setText("Creation Date") item = self.TableWidget.horizontalHeaderItem(1) item.setText("Last Modified") item = self.TableWidget.horizontalHeaderItem(2) item.setText("Serial Number") item = self.TableWidget.horizontalHeaderItem(3) item.setText("Model") item = self.TableWidget.horizontalHeaderItem(4) item.setText("User") self.button_new_hardware = QtWidgets.QPushButton(self.CentralWidget) self.button_new_hardware.setText("NEW HARDWARE") self.button_new_hardware.setGeometry(QtCore.QRect(10, 10, 101, 31)) self.button_new_hardware.setFont(font) self.button_new_hardware.setLayoutDirection(QtCore.Qt.LeftToRight) self.button_new_hardware.setAutoFillBackground(False) self.button_new_hardware.setStyleSheet("") self.button_new_hardware.setObjectName("button_new_hardware") self.button_new_hardware.clicked.connect(self.ShowNewHardwareWindow) self.button_search = QtWidgets.QPushButton(self.CentralWidget) self.button_search.setGeometry(QtCore.QRect(10, 50, 101, 31)) self.button_search.setFont(font) self.button_search.setObjectName("button_search") self.button_search.setText("SEARCH") self.button_search.clicked.connect(self.ShowSearchWindow) self.button_refresh = QtWidgets.QPushButton(self.CentralWidget) self.button_refresh.setGeometry(QtCore.QRect(10, 90, 101, 31)) self.button_refresh.setFont(font) self.button_refresh.setObjectName("button_refresh") self.button_refresh.setText('REFRESH') self.button_export = QtWidgets.QPushButton(self.CentralWidget) self.button_export.setGeometry(QtCore.QRect(10, 130, 101, 31)) self.button_export.setFont(font) self.button_export.setObjectName("button_export") self.button_export.setText('EXPORT') self.button_viewall = QtWidgets.QPushButton(self.CentralWidget) self.button_viewall.setGeometry(QtCore.QRect(10, 170, 101, 31)) self.button_viewall.setFont(font) self.button_viewall.setObjectName("button_viewall") self.button_viewall.setText('VIEW ENTIRE DB') MainWindow.setCentralWidget(self.CentralWidget) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) window = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.SetupUi(window) window.show() sys.exit(app.exec_())ModuleWindows:
from PyQt5 import QtCore, QtGui, QtWidgets import sys import pyodbc import datetime class Ui_NewHardwareWindow(object): def setupUi(self, NewHardwareWindow): super().__init__() NewHardwareWindow.setObjectName("NewHardwareWindow") NewHardwareWindow.resize(265, 167) NewHardwareWindow.setWindowTitle('NEW HARDWARE') NewHardwareWindow.setMinimumSize(265, 167) NewHardwareWindow.setMaximumSize(265, 167) font_label = QtGui.QFont() font_label.setFamily('MS UI Gothic') font_label.setPointSize(10) font_button = QtGui.QFont() font_button.setFamily('MS UI Gothic') font_button.setPointSize(9) self.centralwidget = QtWidgets.QWidget(NewHardwareWindow) self.centralwidget.setObjectName("centralwidget") self.label_serialnumber = QtWidgets.QLabel(self.centralwidget) self.label_serialnumber.setGeometry(QtCore.QRect(10, 20, 101, 20)) self.label_serialnumber.setText("SERIAL NUMBER") self.label_serialnumber.setFont(font_label) self.label_serialnumber.setObjectName("label_serialnumber") self.label_model = QtWidgets.QLabel(self.centralwidget) self.label_model.setGeometry(QtCore.QRect(10, 50, 91, 16)) self.label_model.setText('MODEL') self.label_model.setFont(font_label) self.label_model.setObjectName("label_model") self.label_user = QtWidgets.QLabel(self.centralwidget) self.label_user.setGeometry(QtCore.QRect(10, 80, 81, 16)) self.label_user.setText('USER') self.label_user.setFont(font_label) self.label_user.setObjectName("label_user") self.textbox_serialnumber = QtWidgets.QLineEdit(self.centralwidget) self.textbox_serialnumber.setGeometry(QtCore.QRect(110, 20, 121, 16)) self.textbox_serialnumber.setObjectName("textbox_serialnumber") self.textbox_model = QtWidgets.QLineEdit(self.centralwidget) self.textbox_model.setGeometry(QtCore.QRect(110, 50, 121, 16)) self.textbox_model.setObjectName("textbox_model") self.textbox_username = QtWidgets.QLineEdit(self.centralwidget) self.textbox_username.setGeometry(QtCore.QRect(110, 80, 121, 16)) self.textbox_username.setObjectName("textbox_username") self.button_clear = QtWidgets.QPushButton(self.centralwidget) self.button_clear.setGeometry(QtCore.QRect(110, 110, 61, 31)) self.button_clear.setText('CLEAR') self.button_clear.setFont(font_button) self.button_clear.setObjectName("button_clear") self.button_clear.clicked.connect(self.ClearTextBoxes) self.button_enter = QtWidgets.QPushButton(self.centralwidget) self.button_enter.setGeometry(QtCore.QRect(170, 110, 61, 31)) self.button_enter.setText('ENTER') self.button_enter.setFont(font_button) self.button_enter.setObjectName("button_enter") self.button_enter.clicked.connect(self.EnterNewHardware) self.statusbar = QtWidgets.QStatusBar(NewHardwareWindow) self.statusbar.setObjectName("statusbar") NewHardwareWindow.setCentralWidget(self.centralwidget) NewHardwareWindow.setStatusBar(self.statusbar) def EnterNewHardware(self): serial_number = self.textbox_serialnumber.text() model = self.textbox_model.text() user_name = self.textbox_username.text() creation_date = datetime.datetime.now().strftime('%m/%d/%y') modify_date = datetime.datetime.now().strftime('%m/%d/%y') print(creation_date) print(modify_date) print(serial_number) print(model) print(user_name) azure_server = 'pythonserver5874.database.windows.net' azure_db = 'inventoryDatabase' azure_username = '' password = '' driver = '{ODBC Driver 17 for SQL Server}' connection_string = f"DRIVER={driver};SERVER={azure_server};PORT=1433;DATABASE={azure_db};UID={azure_username};PWD={password}" conn = pyodbc.connect(connection_string) cursor = conn.cursor() sql_statement = 'INSERT INTO inventoryDatabase.dbo.Hardware(CreationDate, ModifyDate, SerialNumber, Model, Username) ' \ 'VALUES (?, ?, ?, ?, ?)' sql_data = (creation_date, modify_date, serial_number, model, user_name) cursor.execute(sql_statement, sql_data) conn.commit() cursor.commit() self.textbox_serialnumber.clear() self.textbox_model.clear() self.textbox_username.clear() self.statusbar.showMessage(serial_number + " has been entered") def ClearTextBoxes(self): self.textbox_serialnumber.clear() self.textbox_model.clear() self.textbox_username.clear() class Ui_SearchWindow(object): def setupUi(self, SearchWindow): super().__init__() SearchWindow.setObjectName("SearchWindow") SearchWindow.resize(277, 135) SearchWindow.setWindowTitle("SEARCH INVENTORY") label_font = QtGui.QFont() label_font.setFamily("MS UI GOTHIC") label_font.setPointSize(10) button_font = QtGui.QFont() button_font.setFamily("MS UI GOTHIC") button_font.setPointSize(10) self.central_widget = QtWidgets.QWidget(SearchWindow) self.central_widget.setObjectName("CentralWidget") self.label_serialnumber = QtWidgets.QLabel(self.central_widget) self.label_serialnumber.setGeometry(QtCore.QRect(10, 20, 111, 20)) self.label_serialnumber.setFont(label_font) self.label_serialnumber.setObjectName("label_serialnumber") self.label_serialnumber.setText("SERIAL NUMBER") self.label_username = QtWidgets.QLabel(self.central_widget) self.label_username.setGeometry(QtCore.QRect(40, 50, 71, 20)) self.label_username.setFont(label_font) self.label_username.setObjectName("label_username") self.label_username.setText("USERNAME") self.textbox_serialnumber = QtWidgets.QLineEdit(self.central_widget) self.textbox_serialnumber.setGeometry(QtCore.QRect(120, 20, 121, 20)) self.textbox_serialnumber.setObjectName("textbox_serialnumber") self.textbox_username = QtWidgets.QLineEdit(self.central_widget) self.textbox_username.setGeometry(QtCore.QRect(120, 50, 121, 20)) self.textbox_username.setObjectName("textbox_username") self.button_search = QtWidgets.QPushButton(self.central_widget) self.button_search.setGeometry(QtCore.QRect(120, 80, 121, 31)) self.button_search.setFont(button_font) self.button_search.setObjectName("button_search") self.button_search.setText("SEARCH") self.button_search.clicked.connect(self.SearchHardware) SearchWindow.setCentralWidget(self.central_widget) self.statusbar = QtWidgets.QStatusBar(SearchWindow) self.statusbar.setObjectName("statusbar") SearchWindow.setStatusBar(self.statusbar) def SearchHardware(self): serial_number = self.textbox_serialnumber.text() azure_server = 'pythonserver5874.database.windows.net' azure_db = 'inventoryDatabase' azure_username = '' password = '!' driver = '{ODBC Driver 17 for SQL Server}' connection_string = f"DRIVER={driver};SERVER={azure_server};PORT=1433;DATABASE={azure_db};UID={azure_username};PWD={password}" conn = pyodbc.connect(connection_string, serial_number) cursor = conn.cursor() sql_statement = 'SELECT * FROM inventoryDatabase.dbo.Hardware WHERE SerialNumber LIKE (?)' cursor.execute(sql_statement, serial_number) cursor.commit() conn.commit() for row in cursor.fetchall(): print(row) if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) NewHardwareWindow = QtWidgets.QMainWindow() ui = Ui_NewHardwareWindow() ui.setupUi(NewHardwareWindow) NewHardwareWindow.show() sys.exit(app.exec_())