有没有办法在用ctypes库打开的消息框里面有一个输入框?到目前为止我有:
import ctypes
messageBox = ctypes.windll.user32.MessageBoxA
title = 'Title'
text = 'Message box!'
returnValue = messageBox(None, text, title, 0x40 | 0x1)
print returnValue
这会给出一个带有图像图标和两个按钮的消息框,这两个按钮我知道如何更改,并设置变量" returnValue"到表示单击按钮的数字。但是,我还需要一个将在消息框中设置为字符串输入的变量。我之所以需要这个而且我不能做简单的a = raw_input('提示')是因为我希望程序本身在后台运行(它会在登录时自动启动)。 / p>
答案 0 :(得分:1)
如果您想要一个简单的解决方案,请使用PyMsgBox模块。它使用Python的内置tkinter库来创建消息框,包括允许用户键入响应的消息框。使用pip install pymsgbox
安装它。
文档在这里:https://pymsgbox.readthedocs.org/
您想要的代码是:
>>> import pymsgbox
>>> returnValue = pymsgbox.prompt('Message box!', 'Title')
答案 1 :(得分:0)
消息框仅用于消息。你需要的是QDialog
。你可以在QtDesigner中创建它(我有这样创建的登录对话框,2 QLineEdit
用于用户名和通行证,2个按钮在QDialogButtonBox
和QCombobox
用于语言选择)。您将获得.ui
个文件,您需要在cmd中以这种方式转换为.py
:
pyuic4 -x YourLoginDialogWindow.ui -o YourLoginDialogWindow.py
导入已创建的YourLoginDialogWindow.py
,您可以使用它并实施您需要的任何方法:
import YourLoginDialogWindow
class YourLoginDialog(QtGui.QDialog):
def __init__(self, parent = None):
super(YourLoginDialog, self).__init__(parent)
self.__ui = YourLoginDialogWindow.Ui_Dialog()
self.__ui.setupUi(self)
...
self.__ui.buttonBox.accepted.connect(self.CheckUserCredentials)
self.__ui.buttonBox.rejected.connect(self.reject)
def GetUsername(self):
return self.__ui.usernameLineEdit.text()
def GetUserPass(self):
return self.__ui.passwordLineEdit.text()
def CheckUserCredentials(self):
#check if user and pass are ok here
#you can use self.GetUsername() and self.GetUserPass() to get them
if THEY_ARE_OK :
self.accept()# this will close dialog and open YourMainProgram in main
else:# message box to inform user that username or password are incorect
QtGui.QMessageBox.about(self,'MESSAGE_APPLICATION_TITLE_STR', 'MESSAGE_WRONG_USERNAM_OR_PASSWORD_STR')
在__main__
首次创建登录对话框,然后是主窗口......
if __name__ == "__main__":
qtApp = QtGui.QApplication(sys.argv)
loginDlg = YourLoginDialog.YourLoginDialog()
if (not loginDlg.exec_()):
sys.exit(-1)
theApp = YourMainProgram.YourMainProgram( loginDlg.GetUsername(), loginDlg.GetPassword())
qtApp.setActiveWindow(theApp)
theApp.show()
sys.exit(qtApp.exec_())