填充combobox可编辑的humanname,并从mariadb行编辑电话和电子邮件



我有一个表hr和一个带hr列表的组合框,我想向hremail_lineEdithrphone_lineEdit显示电子邮件和电话,但我只能向hrphone_lineEdit显示电话。

def hr_name(self):
self._conn = pymysql.connect(host=127.0.0.1, port=3306, user='root', passwd=root, db='testhr', charset='utf8')
self._cur = self._conn.cursor()
sql_coop4hr = 'select human_name,email,phone from hr'
count_coop4hr = self._cur.execute(sql_coop4hr)
res_coop4hr = self._cur.fetchall()
for row in res_coop4hr:
un, email, phone = row
self.hr_name_comboBox.addItem(un, email)
def hr_email(self):
self.hremail_lineEdit.setText(self.hr_name_comboBox.currentData()) #email
self.hrphone_lineEdit.setText(self.hr_name_comboBox.currentData()) #phone

有几个选项:

  • 将电子邮件和电话作为元组(或列表(传递给用户数据:

    self.hr_name_comboBox.clear()
    for row in res_coop4hr:
    un, email, phone = row
    self.hr_name_comboBox.addItem(un, (email, phone))
    
    def hr_email(self):
    email, phone = self.hr_name_comboBox.currentData()
    self.hremail_lineEdit.setText(email)
    self.hrphone_lineEdit.setText(phone)
    
  • 创建与每个数据关联的2个角色:

    EMAIL_ROLE = Qt.UserRole
    PHONE_ROLE = Qt.UserRole + 1
    
    self.hr_name_comboBox.clear()
    for i, row in enumerate(res_coop4hr):
    un, email, phone = row
    self.hr_name_comboBox.insertItem(i, un)
    self.hr_name_comboBox.setItemData(i, email, EMAIL_ROLE)
    self.hr_name_comboBox.setItemData(i, phone, PHONE_ROLE)
    
    def hr_email(self):
    index = self.hr_name_comboBox.currentIndex()
    email = self.hr_name_comboBox.itemData(index, EMAIL_ROLE)
    phone = self.hr_name_comboBox.itemData(index, PHONE_ROLE)
    self.hremail_lineEdit.setText(email)
    self.hrphone_lineEdit.setText(phone)
    

最新更新