2013-02-01 129 views
0

我是一个Python noob,所以我可能会在这里丢失一些东西,但是我的程序中处理字符串的方式有问题。当我显示它时,只显示第一个字符。Python的字符串问题

# 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) 

完整的字符串是'机器'(它实际上比这更长)。 Python如何认为任何字符都是结尾字符,并且一次只显示一个字符?我在这里错过了一些Python基础知识吗?

PS。 GetStatusText参考可在http://www.wxpython.org/docs/api/wx.StatusBar-class.html#GetStatusText处获得。我测试了一个非常长的字符串GetStatusText,它似乎不会剪切文本。

+1

看起来像MessageBox的问题,而不是Python如何处理字符串。 ('logging.debug()'告诉你这个字符串是什么?) – geoffspear

+0

'type(testString)'的结果是什么?也许你会得到一个字符列表而不是实际的字符串对象?在这种情况下的修复将是'testString =“”.join(testString)'。 – filmor

+0

我不认为你正在调用'MessageBox'。浏览文档签名是'int MessageBox(消息,标题,样式等等)'所以我认为你传递了不正确的参数。也许你正在用'MessageDialog'混合东西? – Bakuriu

回答

1

如果使用wxPython的,为什么你想,以显示与ctypes的一个消息框? wxPython包有它自己的消息对话框。请访问以下链接:

的wxPython的演示包(从wxPython的网站下载)具有MessageDialog和GenericMessageDialog的例子。

+0

感谢您的建议。我试过wx.MessageBox,它的工作原理。它显示完整的字符串。我仍然不明白为什么MessageBox与切片的GetStatusText结合不会显示整个字符串......但至少我知道如何绕过它。 谢谢! – Toto

0

它的治疗TestString视为一个列表

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"] 

会然后给你的消息文本的两行。

PURE猜测

+0

这似乎并不奏效。有了这个MessageBox语句完全被跳过(或者可能引发一个异常,我没有详细检查)。 感谢反正试图正如我所说的*纯粹猜测*帮助 – Toto

+0

- 你见过它通过调用''的MessageBox(无,“世界,你好!”,“COUCOU3”,0)''从迈克·德里斯科尔的回答它的工作似乎很明显,它应该工作。话虽如此,我只是注意到它使用''ctypes'' - 所以我认为它不是''wx' - 这可能有助于http://stackoverflow.com/questions/1005117/ctypes-in-python-2-6-help – sotapme

6

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

+0

包装在str工程! – nmz787