目前,我正在开发一个用户可以存储、管理和跟踪维修的应用程序。 应用程序连接到MsSQL数据库以检索正在进行的修复。应用程序的很大一部分是搜索结果窗口。此窗口是一个共享UI,它基于父窗口连接其按钮
我想知道是否有更简单的方法来连接按钮,双击(事件)。目前,我在启动窗口时指定父窗口,子窗口通过执行父窗口的name函数来连接按钮,以确定按钮需要如何连接
这种方法可行,但我觉得我把事情复杂化了
这是SearchResults窗口:
class SearchResultsWindow():
def __init__(self, sqlstring, *sqlparams, parent):
####################### CREATE SEARCH RESULT WINDOW #######################
self.window = QtWidgets.QDialog()
self.ui = Ui_Search_Results_Window()
self.ui.setupUi(self.window)
####################### DEFINING VARIABLES #######################
self.sqlstring = sqlstring
self.sqlparams = sqlparams
self.parent = parent
####################### PARENT DEVIATIONS #######################
if self.parent.__name__() == 'SearchRepairWindow':
####################### SET CONNECTIONS #######################
self.ui.New_PushButton.clicked.connect(lambda: AddRepairWindow()) #NEW PUSHBUTTON
self.ui.Table_TableWidget.doubleClicked.connect(self.edit_repair) #TABLE DOUBLE CLICK
self.ui.Edit_PushButton.clicked.connect(self.edit_repair) #EDIT PUSHBUTTON
self.ui.SuperSearch_PushButton.clicked.connect(self.super_search_repair) #SUPER SEARCH PUSHBUTTON
####################### ENABLE/DISABLE BUTTONS #######################
self.ui.Select_PushButton.setEnabled(False)
####################### VARIABLES #######################
self.ui.SuperSearch_LineEdit.setText(self.parent.ui.SuperSearch_LineEdit.text())
elif self.parent.__name__() == 'AddRepairWindow':
####################### SET CONNECTIONS #######################
self.ui.New_PushButton.clicked.connect(lambda: AddCustomerWindow()) #NEW PUSHBUTTON
self.ui.Table_TableWidget.doubleClicked.connect(self.select_customer) #TABLE DOUBLE CLICK
self.ui.Select_PushButton.clicked.connect(self.select_customer) #SELECT PUSHBUTTON
self.ui.Edit_PushButton.clicked.connect(self.edit_customer) #EDIT PUSHBUTTON
self.ui.SuperSearch_PushButton.clicked.connect(self.super_search_customer) #SUPER SEARCH PUSHBUTTON
####################### ENABLE/DISABLE BUTTONS #######################
####################### VARIABLES #######################
self.ui.SuperSearch_LineEdit.setText(self.parent.ui.SuperSearch_LineEdit.text())
elif self.parent.__name__() == 'SearchCustomerWindow':
####################### SET CONNECTIONS #######################
self.ui.New_PushButton.clicked.connect(lambda: AddCustomerWindow()) #NEW PUSHBUTTON
self.ui.Table_TableWidget.doubleClicked.connect(self.edit_customer) #TABLE DOUBLE CLICK
self.ui.Edit_PushButton.clicked.connect(self.edit_customer) #EDIT PUSHBUTTON
self.ui.SuperSearch_PushButton.clicked.connect(self.super_search_customer) #SUPER SEARCH PUSHBUTTON
####################### ENABLE/DISABLE BUTTONS #######################
self.ui.Select_PushButton.setEnabled(False) #SELECT PUSHBUTTON
####################### VARIABLES #######################
self.ui.SuperSearch_LineEdit.setText(self.parent.ui.SuperSearch_LineEdit.text())
elif self.parent.__name__() == 'EditCustomerWindow':
####################### SET CONNECTIONS #######################
self.ui.Table_TableWidget.doubleClicked.connect(lambda: DetailsRepairWindow(self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), self.headers.index('CustomerID')).text(), self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), self.headers.index('RepairID')).text()))
self.ui.Select_PushButton.clicked.connect(lambda: DetailsRepairWindow(self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), self.headers.index('CustomerID')).text(), self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), self.headers.index('RepairID')).text()))
self.ui.Edit_PushButton.clicked.connect(lambda: DetailsRepairWindow(self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), self.headers.index('CustomerID')).text(), self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), self.headers.index('RepairID')).text()))
####################### ENABLE/DISABLE BUTTONS #######################
self.ui.SuperSearch_PushButton.setEnabled(False)
self.ui.SuperSearch_LineEdit.setEnabled(False)
self.ui.New_PushButton.setEnabled(False)
####################### CHANGE LABELS #######################
self.ui.Select_PushButton.setText('Details')
elif self.parent.__name__() == 'AddRentWindow':
####################### SET CONNECTIONS #######################
self.ui.New_PushButton.clicked.connect(lambda: AddCustomerWindow()) #NEW PUSHBUTTON
self.ui.Table_TableWidget.doubleClicked.connect(self.select_customer) #TABLE DOUBLE CLICK
self.ui.Select_PushButton.clicked.connect(self.select_customer) #SELECT PUSHBUTTON
self.ui.Edit_PushButton.clicked.connect(self.edit_customer) #EDIT PUSHBUTTON
self.ui.SuperSearch_PushButton.clicked.connect(self.super_search_customer) #SUPER SEARCH PUSHBUTTON
####################### ENABLE/DISABLE BUTTONS #######################
####################### VARIABLES #######################
self.ui.SuperSearch_LineEdit.setText(self.parent.ui.SuperSearch_LineEdit.text())
####################### CONNECT COMMON BUTTONS #######################
self.ui.Cancel_PushButton.clicked.connect(lambda: self.window.close())
self.ui.Export_PushButton.clicked.connect(self.export)
####################### EXECUTE QUERY WITH PROVIDED STRING & PARAMETERS #######################
conn.execute(self.sqlstring, self.sqlparams) # EXECUTE QUERY
self.headers = [columnname[0] for columnname in conn._cursor.description] # GET COLUMN NAMES OF CURSOR
if self.fill_table(conn.fetchall()): # IF FILL_TABLE RETURNS TRUE --> SHOW WINDOW
self.window.exec()
####################### CUSTOMER FUNCTIONS #######################
def select_customer(self):
if self.ui.Table_TableWidget.currentRow() != -1:
if self.parent.__name__() == 'AddRepairWindow':
self.parent.set_customer(self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), customer_headers.index('CustomerID')).text(), self)
elif self.parent.__name__() == 'AddRentWindow':
self.parent.set_customer(self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), customer_headers.index('CustomerID')).text(), self)
else:
PopupWindow('No client selected!', 'No client selected!', QtWidgets.QMessageBox.Information)
def edit_customer(self):
if self.ui.Table_TableWidget.currentRow() != -1:
if self.parent.__name__() == 'AddRepairWindow':
EditCustomerWindow(self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), customer_headers.index('CustomerID')).text())
self.refresh_table()
elif self.parent.__name__() == 'SearchCustomerWindow':
EditCustomerWindow(self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), customer_headers.index('CustomerID')).text())
self.refresh_table()
elif self.parent.__name__() == 'AddRentWindow':
EditCustomerWindow(self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), customer_headers.index('CustomerID')).text())
self.refresh_table()
else:
PopupWindow('No client selected!', 'No client selected!', QtWidgets.QMessageBox.Information)
####################### REPAIR FUNCTIONS #######################
def edit_repair(self):
self.ui.Table_TableWidget.item
if self.ui.Table_TableWidget.currentRow() != -1:
if self.parent.__name__() == 'SearchRepairWindow':
DetailsRepairWindow(self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), self.headers.index('CustomerID')).text(), self.ui.Table_TableWidget.item(self.ui.Table_TableWidget.currentRow(), self.headers.index('RepairID')).text())
self.refresh_table()
else:
PopupWindow('No client selected!', 'No client selected!', QtWidgets.QMessageBox.Information)
####################### GENERAL FUNCTIONS #######################
def refresh_table(self):
conn.execute(self.sqlstring, self.sqlparams) #EXECUTE QUERY
self.fill_table(conn.fetchall())
def super_search_repair(self):
self.sqlstring = '''
SELECT Repairs.[Repair Number],
Customers.Name,
Customers.[First Name],
Repairs.[Creation Date],
Customers.Telephone,
Customers.Cellphone,
Repairs.Brand,
Repairs.Type,
Repairs.[Power Adapter],
Repairs.Mouse,
Repairs.Bag,
Repairs.Other,
Repairs.Password,
Repairs.Status,
Customers.[Primary Address],
Customers.Postcode,
Customers.Town,
Customers.Email,
Customers.CustomerID,
Repairs.RepairID
FROM Repairs
INNER JOIN Customers
ON Repairs.CustomerID = Customers.CustomerID
WHERE Customers.Name LIKE (?)
OR Customers.[First Name] LIKE (?)
OR Customers.[Middle Name] LIKE (?)
OR Customers.[Primary Address] LIKE (?)
OR Customers.[Secondary Address] LIKE (?)
OR Customers.Telephone LIKE (?)
OR Customers.Cellphone LIKE (?)
OR Customers.Email LIKE (?)'''
self.sqlparams = (
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%")
conn.execute(self.sqlstring, self.sqlparams)
self.fill_table(conn.fetchall())
def super_search_customer(self):
self.sqlstring = '''
SELECT *
FROM CUSTOMERS
WHERE Name LIKE (?)
OR [First Name] LIKE (?)
OR [Middle Name] LIKE (?)
OR [Primary Address] LIKE (?)
OR [Secondary Address] LIKE (?)
OR Telephone LIKE (?)
OR Cellphone LIKE (?)
OR Email LIKE (?)'''
self.sqlparams = (
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%",
"%"+self.ui.SuperSearch_LineEdit.text()+"%")
conn.execute(self.sqlstring, self.sqlparams)
self.fill_table(conn.fetchall())
def export(self):
fileName, _ = QtWidgets.QFileDialog.getSaveFileName(caption='Save File', directory='', filter='*.xlsx')
if fileName:
workbook = xlsxwriter.Workbook(fileName)
worksheet = workbook.add_worksheet()
header_format = workbook.add_format()
header_format.set_border(1)
header_format.set_bold(bold=True)
default_format = workbook.add_format()
default_format.set_border(1)
for index, column in enumerate(self.headers):
worksheet.set_column(index, index, 15)
worksheet.write(0, index, column, header_format)
for currentColumn in range(self.ui.Table_TableWidget.columnCount()):
for currentRow in range(self.ui.Table_TableWidget.rowCount()):
try:
text = self.ui.Table_TableWidget.item(currentRow, currentColumn).text()
worksheet.write(currentRow+1, currentColumn, text, default_format)
except AttributeError:
pass
workbook.close()
def fill_table(self, query_result):
if query_result:
####################### SET ROWS AND COLUMNS #######################
self.ui.Table_TableWidget.setRowCount(len(query_result))
self.ui.Table_TableWidget.setColumnCount(len(self.headers))
####################### FILL IN QTABLEWIDGET HEADERS #######################
for a in range(0, len(self.headers)):
item = QtWidgets.QTableWidgetItem()
self.ui.Table_TableWidget.setHorizontalHeaderItem(a, item)
item.setText(self.headers[a])
####################### CREATE CELLS AND SET TEXT #######################
for row_index, row in enumerate(query_result):
for column_index in range(0, len(self.headers)):
self.ui.Table_TableWidget.setItem(row_index, column_index, QTableWidgetItem(str(row[column_index])))
####################### DECRYPT PASSWORD FIELDS #######################
if 'Password' in self.headers:
for row_index, row in enumerate(query_result):
self.ui.Table_TableWidget.setItem(row_index, self.headers.index('Password'), QTableWidgetItem(decrypt_string(str(row[self.headers.index('Password')]))))
####################### RESIZE COLUMNS TO CONTENTS #######################
self.ui.Table_TableWidget.resizeColumnsToContents()
####################### IF QUERY IS FINISHED RETURN TRUE #######################
return True
else:
####################### IF QUERY IS FAILS OR IS EMPTY RETURN POPUP AND FALSE #######################
PopupWindow('No results!','No results!', QtWidgets.QMessageBox.Information)
self.ui.Table_TableWidget.setRowCount(0)
return False
def __name__(self):
'''Return name of the class'''
return self.__class__.__name__
如果您对我的代码或我的工作方式有任何评论,请发表评论(我仍在学习Python)
目前没有回答
相关问题 更多 >
编程相关推荐