Python的字符串问题

Python的字符串问题,python,string,wxpython,Python,String,Wxpython,我是一个PythonNoob,所以这里可能遗漏了一些东西,但我在程序中如何处理字符串方面遇到了问题。当我显示它时,只显示第一个字符 # some code MessageBox = ctypes.windll.user32.MessageBoxA # some other code testString = self.statusBar1.GetStatusText(0) # displays "azertyu" MessageBox(None, "azertyu", 'COUCOU', 0)

我是一个PythonNoob,所以这里可能遗漏了一些东西,但我在程序中如何处理字符串方面遇到了问题。当我显示它时,只显示第一个字符

# some code
MessageBox = ctypes.windll.user32.MessageBoxA
# some other code
testString = self.statusBar1.GetStatusText(0)
# displays "azertyu"
MessageBox(None, "azertyu", 'COUCOU', 0)
# displays 'M'
MessageBox(None, testString, 'COUCOU3', 0)
# displays 'a'
MessageBox(None, testString[1:], 'COUCOU3', 0) #
#displays 'c'
MessageBox(None, testString[2:], 'COUCOU3', 0)
完整的字符串是“Machine”(实际上比这个长)。 为什么Python认为任何字符都是结束字符,并且一次只显示一个字符?我是否缺少一些Python的基础知识


PS.GetStatusText参考可从以下网址获得:。我用一个很长的字符串测试了GetStatusText,它似乎没有剪切文本。

它将测试字符串视为一个列表

In [214]: for x in "Machine":
   .....:     print x
   .....:
M
a
c
h
i
n
e
你试过了吗

MessageBox(None, [testString], 'COUCOU3', 0)
就好像
MessageBox
需要一个txt列表,这可能是有意义的:

["DANGER", "Will Robinson"]
然后在你的信息上给出两行txt


纯粹的猜测

如果您使用的是wxPython,为什么要尝试显示带有ctypes的消息框?wxPython包有自己的消息对话框。请参阅以下链接:


wxPython演示包(可从wxPython网站下载)包含MessageDialog和GenericMessageDialog的示例

MessageBoxA是MessageBox win32 API的ascii版本。您的testString可能是一个Unicode值,因此传递给MessageBoxA的值最终将看起来像一个字节数组,每个其他索引中都有一个零。换句话说,它看起来像一个字符串,只有一个字符以空字符结尾。我打赌如果您使用str(testString)或切换到MessageBoxW,那么它将按预期工作,但是您确实应该使用wx.MessageBox或wx.MessageDialog来代替。

尝试
ctypes.windell.user32.MessageBoxW
而不是
ctypes.windell.user32.MessageBoxA

import ctypes
ctypes.windll.user32.MessageBoxW(None, "Hello, world!", "Test", 0)

看起来MessageBox有问题,而不是Python如何处理字符串。(logging.debug()告诉您字符串是什么?)类型(testString)的结果是什么?也许你得到的是一个字符列表,而不是一个实际的字符串对象?这种情况下的修复方法是
testString=“”.join(testString)
。我认为您没有正确调用
MessageBox
。浏览文档时,签名是
int MessageBox(消息、标题、样式等)
,因此我认为您传递的参数不正确。也许你把东西和
MessageDialog
混在一起了?我的MessageBox调用来自那个页面,很抱歉我这么不懂,但是我应该如何使用logging.debug()或type()?我正在从Windows控制台提示符(T:\toto\app.py)运行我的应用程序。下面是我从logging.debug()获得的信息:debug:root:Machine:Host1这正是我想要的('Machine:Host1')。现在我必须理解为什么MessageBox会截断它。这不是“:”因为我测试了一个包含该字符的字符串常量,它显示ok。这似乎不起作用。这样就完全跳过了MessageBox语句(或者可能引发异常,我还没有签入详细信息)。无论如何,感谢您尝试帮助我,因为我说的是纯粹的猜测-您是否通过调用
MessageBox(无“Hello World!”,“COUCOU3',0)
从Mike Driscoll的“答案”可以看出,它显然是可行的。说到这里,我刚刚注意到它使用了
ctypes
——所以我想它不是“wx”——这可能会有所帮助,谢谢你的建议。我试过wx.MessageBox,它可以工作。它显示完整的字符串。我仍然感到困惑,为什么MessageBox与切片的GetStatusText组合在一起不会显示整个字符串……但至少我知道如何绕过它。非常感谢。