Python中的字符串问题

0 投票
4 回答
3036 浏览
提问于 2025-04-17 14:26

我还是个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的基础知识?

顺便说一下,GetStatusText的相关信息可以在这里找到:http://www.wxpython.org/docs/api/wx.StatusBar-class.html#GetStatusText。我用一个很长的字符串测试过GetStatusText,似乎没有截断文本。

4 个回答

1

试试用 ctypes.windll.user32.MessageBoxW,而不是 ctypes.windll.user32.MessageBoxA

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

MessageBoxA 是 Windows 系统中一个用于显示消息框的函数,它处理的是 ASCII 字符。你传入的 testString 可能是 Unicode 格式的,这样传给 MessageBoxA 的值就会变成一个字节数组,每隔一个位置就会有一个零。换句话说,它看起来像是一个只有一个字符的字符串,后面跟着一个空字符(NULL)。我猜如果你用 str(testString) 转换一下,或者换成 MessageBoxW,这样就能正常工作了。不过其实你应该使用 wx.MessageBox 或 wx.MessageDialog 这些更合适的工具。

1

如果你在使用wxPython,为什么还要用ctypes来显示消息框呢?其实wxPython这个包里已经有自己的消息对话框了。你可以看看下面这些链接:

wxPython的演示包(可以从wxPython官网上下载)里有MessageDialog和GenericMessageDialog的例子。

撰写回答