Я нуб из 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 / апи / wx.StatusBar - class.html # GetStatusText. Я протестировал GetStatusText с очень длинной строкой, и он, похоже, не обрезает тексты.

0
Toto 1 Фев 2013 в 18:25

3 ответа

Лучший ответ

Если вы используете wxPython, почему вы пытаетесь показать окно сообщения с ctypes? Пакет wxPython имеет свои собственные диалоги сообщений. Смотрите следующие ссылки:

Демонстрационный пакет wxPython (загружаемый с веб-сайта wxPython) содержит примеры MessageDialog и GenericMessageDialog.

1
Mike Driscoll 1 Фев 2013 в 16:44

MessageBoxA - это ascii версия MessageBox win32 API. Ваш testString, вероятно, является значением Unicode, поэтому значение, передаваемое в MessageBoxA, в конечном итоге будет выглядеть как массив байтов с нулем в каждом другом индексе. Другими словами, это выглядит как строка символов с одним символом, оканчивающимся символом NULL. Бьюсь об заклад, если вы используете str (testString) или переключитесь на MessageBoxW, тогда он будет работать как положено, однако вам действительно следует использовать вместо него wx.MessageBox или wx.MessageDialog.

6
RobinDunn 1 Фев 2013 в 23:31

Он рассматривает 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"]

Затем даст две строки текста на ваше сообщение.

ЧИСТАЯ РАБОТА

0
sotapme 1 Фев 2013 в 15:04