如何在pyqt MessageBox中使用变量

时间:2018-05-26 10:44:27

标签: python user-interface pyqt qmessagebox

如果要将数据添加到数据库,我使用MessageBox来获取用户输入,但我不知道如何将变量放在实际消息中。 MessageBox函数如下所示:

def message(self, par_1, par_2):
    odp = QMessageBox.question(self, 'Information', "No entry. Would you like to add it to DB?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
    if odp == QMessageBox.Yes:
        return True
    else:
        return False

函数被调用如下:

self.message(autor_firstname, autor_lastname)

我尝试添加:

odp.setDetailText(par_1, par_2)

但它并没有像预期的那样奏效。另外,当用户点击"否"时,我遇到了问题。程序崩溃而不是返回主窗口。

2 个答案:

答案 0 :(得分:1)

根据the docs on QMessageBox::question,返回值是单击的按钮。使用静态方法QMessageBox::question限制了您自定义QMessageBox的方式。相反,请明确创建QMessageBox的实例,根据需要调用setTextsetInformativeTextsetDetailedText。请注意,您的参数也与setDetailedText所需的参数不匹配。那些文档是here。我认为你的代码看起来应该是这样的。

def message(self, par_1, par_2):

    # Create the dialog without running it yet
    msgBox = QMessageBox()

    # Set the various texts
    msgBox.setWindowTitle("Information")
    msgBox.setText("No entry. Would you like to add it to the database")
    detail = "%s\n%s" % (par_1, par_2) # formats the string with one par_ per line.
    msgBox.setDetailedText(detail) 

    # Add buttons and set default
    msgBox.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
    msgBox.setDefaultButton(QMessageBox.No)     

    # Run the dialog, and check results   
    bttn = msgBox.exec_()
    if bttn == QMessageBox.Yes:
        return True
    else:
        return False

答案 1 :(得分:0)

这也可以解决您的问题:

def message(self, par_1, par_2):
    # Create the dialog without running it yet
    msgBox = QMessageBox()

    # Set the various texts
    msgBox.setWindowTitle("Information")
    msgBox.setText("No entry for '"+str(par_1)+" "+str(par_2)+"'.Would you like to add it to the database")
    

   # Add buttons and set default
   msgBox.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
   msgBox.setDefaultButton(QMessageBox.No)     

   # Run the dialog, and check results   
   bttn = msgBox.exec_()
   if bttn == QMessageBox.Yes:
      return True
   else:
      return False

第6行不使用字符串连接。