0

我是一个 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)

完整的字符串是 'Machine' (实际上比这更长)。Python 怎么会认为任何字符都是结尾字符并且一次只显示一个字符?我在这里缺少一些 Python 基础知识吗?

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

4

4 回答 4

7

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

于 2013-02-01T23:31:03.557 回答
1

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

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

于 2013-02-01T16:44:42.560 回答
1

尝试ctypes.windll.user32.MessageBoxW代替ctypes.windll.user32.MessageBoxA

import ctypes
ctypes.windll.user32.MessageBoxW(None, "Hello, world!", "Test", 0)
于 2021-02-10T08:46:09.910 回答
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"]

然后会在您的消息上给出两行txt。

纯猜测

于 2013-02-01T15:04:26.840 回答