2017-10-11 98 views
0

我正在製作一個客戶記錄程序,該程序將用於美容院。PyQt5.How如何填寫基於幾個參數的表小部件?

Main interface

所以,我需要使用這個對話窗口來填充我的表格窗口小部件。

每條記錄​​需要放置在準確的時間位置。那麼,如何實現?

這是我的接口和對話框代碼由QtDesigner創建。 表構件

self.tableWidget = QtWidgets.QTableWidget(self.centralwidget) 
    self.tableWidget.setGeometry(QtCore.QRect(330, 0, 521, 781)) 
    self.tableWidget.setObjectName("tableWidget") 
    self.tableWidget.setColumnCount(5) 
    self.tableWidget.setRowCount(25) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(0, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(1, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(2, item) 
    item = QtWidgets.QTableWidgetItem() 
    #and so on... 
    MainWindow.setCentralWidget(self.centralwidget) 
    self.statusbar = QtWidgets.QStatusBar(MainWindow) 
    self.statusbar.setObjectName("statusbar") 
    MainWindow.setStatusBar(self.statusbar) 

def retranslateUi(self, MainWindow): 
    _translate = QtCore.QCoreApplication.translate 
    MainWindow.setWindowTitle(_translate("MainWindow", "Главная")) 
    self.addclient.setText(_translate("MainWindow", "Записать клиента")) 
    self.uslugi.setText(_translate("MainWindow", "Список услуг")) 
    self.mastera.setText(_translate("MainWindow", "Список мастеров")) 
    item = self.tableWidget.horizontalHeaderItem(0) 
    item.setText(_translate("MainWindow", "Время")) 
    item = self.tableWidget.horizontalHeaderItem(1) 
    item.setText(_translate("MainWindow", "Мастер")) 
    item = self.tableWidget.horizontalHeaderItem(2) 
    item.setText(_translate("MainWindow", "Услуга")) 
    item = self.tableWidget.horizontalHeaderItem(3) 
    item.setText(_translate("MainWindow", "Имя ")) 
    item = self.tableWidget.horizontalHeaderItem(4) 
    item.setText(_translate("MainWindow", "Номер")) 
    __sortingEnabled = self.tableWidget.isSortingEnabled() 
    self.tableWidget.setSortingEnabled(False) 
    item = self.tableWidget.item(0, 0) 
    item.setText(_translate("MainWindow", "8:00")) 
    item = self.tableWidget.item(1, 0) 
    item.setText(_translate("MainWindow", "8:30")) 
    item = self.tableWidget.item(2, 0) 
    #... 
    self.tableWidget.setSortingEnabled(__sortingEnabled) 

和對話窗口

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 
     Dialog.setObjectName("Dialog") 
     Dialog.resize(281, 176) 
     self.comboBox = QtWidgets.QComboBox(Dialog) 
     self.comboBox.setGeometry(QtCore.QRect(90, 10, 71, 22)) 
     self.comboBox.setObjectName("comboBox") 
     self.comboBox.addItem("") 
     self.comboBox_2 = QtWidgets.QComboBox(Dialog) 
     self.comboBox_2.setGeometry(QtCore.QRect(10, 10, 71, 22)) 
     self.comboBox_2.setObjectName("comboBox_2") 
     self.comboBox_2.addItem("") 
     self.dateTimeEdit = QtWidgets.QDateTimeEdit(Dialog) 
     self.dateTimeEdit.setGeometry(QtCore.QRect(10, 60, 194, 22)) 
     self.dateTimeEdit.setObjectName("dateTimeEdit") 
     self.label_2 = QtWidgets.QLabel(Dialog) 
     self.label_2.setGeometry(QtCore.QRect(10, 40, 91, 16)) 
     self.label_2.setObjectName("label_2") 
     self.lineEdit = QtWidgets.QLineEdit(Dialog) 
     self.lineEdit.setGeometry(QtCore.QRect(150, 110, 113, 20)) 
     self.lineEdit.setObjectName("lineEdit") 
     self.label_3 = QtWidgets.QLabel(Dialog) 
     self.label_3.setGeometry(QtCore.QRect(150, 90, 121, 16)) 
     self.label_3.setObjectName("label_3") 
     self.lineEdit_2 = QtWidgets.QLineEdit(Dialog) 
     self.lineEdit_2.setGeometry(QtCore.QRect(10, 110, 113, 20)) 
     self.lineEdit_2.setObjectName("lineEdit_2") 
     self.label_4 = QtWidgets.QLabel(Dialog) 
     self.label_4.setGeometry(QtCore.QRect(10, 90, 111, 16)) 
     self.label_4.setObjectName("label_4") 
     self.pushButton = QtWidgets.QPushButton(Dialog) 
     self.pushButton.setGeometry(QtCore.QRect(150, 140, 111, 23)) 
     self.pushButton.setObjectName("pushButton") 
     self.pushButton_2 = QtWidgets.QPushButton(Dialog) 
     self.pushButton_2.setGeometry(QtCore.QRect(10, 140, 111, 23)) 
     self.pushButton_2.setObjectName("pushButton_2") 

     self.retranslateUi(Dialog) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 

    def retranslateUi(self, Dialog): 
     _translate = QtCore.QCoreApplication.translate 
     Dialog.setWindowTitle(_translate("Dialog", "Новый клиент")) 
     self.comboBox.setItemText(0, _translate("Dialog", "Услуга")) 
     self.comboBox_2.setItemText(0, _translate("Dialog", "Мастер")) 
     self.label_2.setText(_translate("Dialog", "Дата и время:")) 
     self.label_3.setText(_translate("Dialog", "Контактный номер:")) 
     self.label_4.setText(_translate("Dialog", "Имя клиента")) 
     self.pushButton.setText(_translate("Dialog", "Добавить клиента")) 
     self.pushButton_2.setText(_translate("Dialog", "Отмена записи")) 

所以我需要在對話框的輸入字段inftomation被放置在準確的時間在表部件。我會感謝任何幫助!對不起,QtDesigner濫用:d

這是不建議打開的對話框窗口

class MyDialog(QtWidgets.QDialog): 
def __init__(self, parent=None): 
    super(MyDialog, self).__init__(parent) 
    self.ui = Ui_Dialog() 
    self.ui.setupUi(self) 

class MyWin(QtWidgets.QMainWindow): 
    def __init__(self, parent=None): 
     super(MyWin, self).__init__(parent) 
     self.ui = Ui_MainWindow() 
     self.ui.setupUi(self) 
     self.ui.addclient.clicked.connect(self.addclientfunction) 

def addclientfunction(self): 
    self.dialog = MyDialog() 
    self.dialog.show() 

整個MyWidnow類

class Ui_MainWindow(object): 
def setupUi(self, MainWindow): 
    MainWindow.setObjectName("MainWindow") 
    MainWindow.resize(860, 803) 
    self.centralwidget = QtWidgets.QWidget(MainWindow) 
    self.centralwidget.setObjectName("centralwidget") 
    self.calendarWidget = QtWidgets.QCalendarWidget(self.centralwidget) 
    self.calendarWidget.setGeometry(QtCore.QRect(0, 0, 331, 191)) 
    self.calendarWidget.setObjectName("calendarWidget") 
    self.addclient = QtWidgets.QPushButton(self.centralwidget) 
    self.addclient.setGeometry(QtCore.QRect(0, 350, 331, 81)) 
    font = QtGui.QFont() 
    font.setFamily("Verdana") 
    font.setPointSize(10) 
    self.addclient.setFont(font) 
    self.addclient.setObjectName("addclient") 
    self.uslugi = QtWidgets.QPushButton(self.centralwidget) 
    self.uslugi.setEnabled(True) 
    self.uslugi.setGeometry(QtCore.QRect(0, 270, 331, 81)) 
    font = QtGui.QFont() 
    font.setFamily("Verdana") 
    font.setPointSize(10) 
    self.uslugi.setFont(font) 
    self.uslugi.setObjectName("uslugi") 
    self.mastera = QtWidgets.QPushButton(self.centralwidget) 
    self.mastera.setGeometry(QtCore.QRect(0, 190, 331, 81)) 
    font = QtGui.QFont() 
    font.setFamily("Verdana") 
    font.setPointSize(10) 
    self.mastera.setFont(font) 
    self.mastera.setObjectName("mastera") 
    self.tableWidget = QtWidgets.QTableWidget(self.centralwidget) 
    self.tableWidget.setGeometry(QtCore.QRect(330, 0, 521, 781)) 
    self.tableWidget.setObjectName("tableWidget") 
    self.tableWidget.setColumnCount(5) 
    self.tableWidget.setRowCount(25) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(0, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(1, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(2, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(3, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(4, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(5, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(6, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(7, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(8, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(9, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(10, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(11, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(12, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(13, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(14, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(15, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(16, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(17, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(18, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(19, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(20, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(21, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(22, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(23, item) 
    item = QtWidgets.QTableWidgetItem() 
    self.tableWidget.setVerticalHeaderItem(24, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    font = QtGui.QFont() 
    font.setStyleStrategy(QtGui.QFont.PreferAntialias) 
    item.setFont(font) 
    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 = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(0, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(1, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(2, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(3, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(4, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(5, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(6, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(7, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(8, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(9, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(10, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(11, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(12, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(13, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(14, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(15, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(16, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(17, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(18, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(19, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(20, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(21, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(22, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(23, 0, item) 
    item = QtWidgets.QTableWidgetItem() 
    item.setTextAlignment(QtCore.Qt.AlignCenter) 
    self.tableWidget.setItem(24, 0, item) 
    MainWindow.setCentralWidget(self.centralwidget) 
    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", "Главная")) 
    self.addclient.setText(_translate("MainWindow", "Записать клиента")) 
    self.uslugi.setText(_translate("MainWindow", "Список услуг")) 
    self.mastera.setText(_translate("MainWindow", "Список мастеров")) 
    item = self.tableWidget.horizontalHeaderItem(0) 
    item.setText(_translate("MainWindow", "Время")) 
    item = self.tableWidget.horizontalHeaderItem(1) 
    item.setText(_translate("MainWindow", "Мастер")) 
    item = self.tableWidget.horizontalHeaderItem(2) 
    item.setText(_translate("MainWindow", "Услуга")) 
    item = self.tableWidget.horizontalHeaderItem(3) 
    item.setText(_translate("MainWindow", "Имя ")) 
    item = self.tableWidget.horizontalHeaderItem(4) 
    item.setText(_translate("MainWindow", "Номер")) 
    __sortingEnabled = self.tableWidget.isSortingEnabled() 
    self.tableWidget.setSortingEnabled(False) 
    item = self.tableWidget.item(0, 0) 
    item.setText(_translate("MainWindow", "8:00")) 
    item = self.tableWidget.item(1, 0) 
    item.setText(_translate("MainWindow", "8:30")) 
    item = self.tableWidget.item(2, 0) 
    item.setText(_translate("MainWindow", "9:00")) 
    item = self.tableWidget.item(3, 0) 
    item.setText(_translate("MainWindow", "9:30")) 
    item = self.tableWidget.item(4, 0) 
    item.setText(_translate("MainWindow", "10:00")) 
    item = self.tableWidget.item(5, 0) 
    item.setText(_translate("MainWindow", "10:30")) 
    item = self.tableWidget.item(6, 0) 
    item.setText(_translate("MainWindow", "11:00")) 
    item = self.tableWidget.item(7, 0) 
    item.setText(_translate("MainWindow", "11:30")) 
    item = self.tableWidget.item(8, 0) 
    item.setText(_translate("MainWindow", "12:00")) 
    item = self.tableWidget.item(9, 0) 
    item.setText(_translate("MainWindow", "12:30")) 
    item = self.tableWidget.item(10, 0) 
    item.setText(_translate("MainWindow", "13:00")) 
    item = self.tableWidget.item(11, 0) 
    item.setText(_translate("MainWindow", "13:30")) 
    item = self.tableWidget.item(12, 0) 
    item.setText(_translate("MainWindow", "14:00")) 
    item = self.tableWidget.item(13, 0) 
    item.setText(_translate("MainWindow", "14:30")) 
    item = self.tableWidget.item(14, 0) 
    item.setText(_translate("MainWindow", "15:00")) 
    item = self.tableWidget.item(15, 0) 
    item.setText(_translate("MainWindow", "15:30")) 
    item = self.tableWidget.item(16, 0) 
    item.setText(_translate("MainWindow", "16:00")) 
    item = self.tableWidget.item(17, 0) 
    item.setText(_translate("MainWindow", "16:30")) 
    item = self.tableWidget.item(18, 0) 
    item.setText(_translate("MainWindow", "17:00")) 
    item = self.tableWidget.item(19, 0) 
    item.setText(_translate("MainWindow", "17:30")) 
    item = self.tableWidget.item(20, 0) 
    item.setText(_translate("MainWindow", "18:00")) 
    item = self.tableWidget.item(21, 0) 
    item.setText(_translate("MainWindow", "18:30")) 
    item = self.tableWidget.item(22, 0) 
    item.setText(_translate("MainWindow", "19:00")) 
    item = self.tableWidget.item(23, 0) 
    item.setText(_translate("MainWindow", "19:30")) 
    item = self.tableWidget.item(24, 0) 
    item.setText(_translate("MainWindow", "20:00")) 
    self.tableWidget.setSortingEnabled(__sortingEnabled) 
+0

用哪個按鈕應該在對話窗口被打開? – eyllanesc

+0

ou可以放置整個MainWindow_UI小部件 – eyllanesc

+0

記錄客戶端按鈕,但我已經編碼它。 – akeg

回答

1

修改設計的代碼記錄客戶端按鈕的功能,如果你是初學者,所以最好創建實現邏輯和使用設計的新類,這些類將是Dialog和MainWindow。

對話框: 要容易處理一些任務,我們將連接了addClient和取消按鈕在接受和拒絕插槽,使我們可以在一個非模態方式使用對話框,並使用exec_()返回一個代碼如果被接受,另一個被取消。必須創建一個方法來收集輸入信息。

MainWindow: 單擊的記錄客戶端信號連接到對話框顯示並收集對話框數據的插槽。創建一個邏輯來獲取正確的行並添加元素。

class Dialog(QDialog, Ui_Dialog): 
    def __init__(self, parent=None): 
     QDialog.__init__(self, parent) 
     self.setupUi(self) 
     # cancel 
     self.pushButton_2.clicked.connect(self.reject) 
     # accept 
     self.pushButton.clicked.connect(self.accept) 
     self.dateTimeEdit.setDisplayFormat("M/d/yy hh:mm") 

    def data(self): 
     master = self.comboBox_2.currentText() 
     service = self.comboBox.currentText() 
     name = self.lineEdit_2.text() 
     contact_number = self.lineEdit.text() 
     time = self.dateTimeEdit.time() 
     return master, service, name, contact_number, time 

class MainWindow(QMainWindow, Ui_MainWindow): 
    def __init__(self, parent=None): 
     QMainWindow.__init__(self, parent) 
     self.setupUi(self) 
     self.addclient.clicked.connect(self.onAddClient) 

    def onAddClient(self): 
     dialog = Dialog(self) 
     if dialog.exec_() == QDialog.Accepted: 
      master, service, name, contact_number, time = dialog.data() 
      row = int(QTime(8, 0).secsTo(time)/(30*60)) 
      if row >= 0: 
       for k, text in enumerate([master, service, name, contact_number]): 
        self.tableWidget.setItem(row, k+1, QTableWidgetItem(text)) 

if __name__ == '__main__': 
    app = QApplication(sys.argv) 
    w = MainWindow() 
    w.show() 
    sys.exit(app.exec_()) 

輸出:

enter image description here

enter image description here

+0

應該有前綴QtWidgets。之前名爲QDialog,QMainWindow。 完美地工作,謝謝! – akeg

+0

有很多方法可以導入。我使用:'從PyQt5.QtWidgets導入QDialog,QMainWindow':P – eyllanesc

+0

如果你想管理表,就好像它們是頁面一樣,我推薦使用QTableView,將信息保存到數據庫中,使用QSqlTableModel。 – eyllanesc