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は、どの文字も最後の文字であると見なし、一度に1文字だけを表示するのはなぜですか?ここでPythonの基本が欠けていますか?

PS。GetStatusTextリファレンスは、http: //www.wxpython.org/docs/api/wx.StatusBar-class.html#GetStatusTextで入手できます。非常に長い文字列でGetStatusTextをテストしましたが、テキストがカットされていないようです。

4

4 に答える 4

7

MessageBoxAは、MessageBoxwin32APIのASCIIバージョンです。testStringはおそらくUnicode値であるため、MessageBoxAに渡される値は、他のすべてのインデックスがゼロのバイト配列のようになります。つまり、1文字だけがNULL文字で終了する文字列のように見えます。str(testString)を使用するか、MessageBoxWに切り替えると、期待どおりに機能するはずですが、実際には代わりにwx.MessageBoxまたはwx.MessageDialogを使用する必要があります。

于 2013-02-01T23:31:03.557 に答える
1

wxPythonを使用している場合、なぜctypesを含むメッセージボックスを表示しようとしているのですか?wxPythonパッケージには、独自のメッセージダイアログがあります。次のリンクを参照してください。

wxPythonデモパッケージ(wxPython Webサイトからダウンロード可能)には、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)

txtのリストを期待しているようMessageBoxに、これは理にかなっているかもしれません。

["DANGER", "Will Robinson"]

次に、メッセージに2行のtxtを入力します。

純粋な推測

于 2013-02-01T15:04:26.840 に答える