#python #wxpython
Вопрос:
Я пытаюсь нарисовать кнопку на растровом объекте. В зависимости от положения y, он должен использовать растровое изображение 1, если положение y находится в пределах значения высоты bmp1, и растровое изображение 2, если это не так. По какой-то причине это не работает:
wx.Button(bitmap1 if ypos <= bmp1.GetHeight() else bitmap2, label='Run', id=i, pos=(xpos, ypos))
Я могу нарисовать кнопку только на одном изображении wx.StaticBitmap или на панели. Родители изображений-это панель.
Это отлично работает, если я хочу переключаться между растровым изображением или непосредственно на панель.
Что это дает?
ПРИМЕЧАНИЕ: Мне удалось обойти это, используя PIL, чтобы создать динамическое изображение, достаточно большое, чтобы разместить мои сгенерированные кнопки (непрерывный размер y, в зависимости от их количества и размещения), однако эта идея/код все равно должны быть действительны.
Если я заменю значение «растровое изображение 2» для панели и немного сдвину изображение растрового изображения 2, нарисованное на панели, то я увижу, что программа рисует под растровым изображением 2. Почему? Изображение размещено точно так же, как растровое изображение 1, и у растрового изображения 1 нет проблем с отображением на нем кнопок? :O
Комментарии:
1. Честно говоря, я ошеломлен тем, что вы
can
включилиif
утверждение в определение кнопки, что привело к большой путанице с моей стороны, но вы не можете просто сделать любой виджетchild
из любого другого виджета.parent
Виджет должен быть способен обрабатыватьchild
виджеты, напримерwx.Frame
, иwx.Panel
. Я готов исправиться в этом, так как вам уже удалось выполнить то, что я считал невозможным. 😉2. @RolfofSaxony-это достаточно веская причина для понижения голоса? В любом случае — вы можете сделать это здесь, как видите. Однако моя проблема в том, что рисунок, по-видимому, может быть выполнен только на одной картинке и панели, но не на той или иной картинке. Я делаю именно это — назначаю, на каком родителе рисовать, но, похоже, он не хочет рисовать на двух изображениях, если одно из них завершено. Я генерирую n кнопок. Какая-нибудь помощь?
3. @RolfofSaxony Я добавил заметку с дополнительным контекстом, если это поможет в процессе размышлений
4. Человек, который комментирует, не обязательно является голосующим против. Это был не мой голос против. Я был слишком поражен этим
if
заявлением, чтобы вообще рассматривать возможность голосования.
Ответ №1:
Я разобрался в проблеме:
Родительский объект кнопки должен получать ypo в соответствии с размерами родителя, а не в том месте, где он нарисован на рамке, например так:
wx.Button(bitmap1 if ypos <= bmp1.GetHeight() else bitmap2, label='Run {i}', id=i, pos=(80, ypos if ypos <= bmp1.GetHeight() else ypos-img_height))
да, если да,
Наконец-то!
Комментарии:
1. Отличная работа! Однако подумайте о создании переменных для растрового изображения, положения и т. Д., Поскольку этот метод вполне может оказаться менее чем ремонтопригодным. Это очень странный способ делать вещи, но если вам это удобно, прекрасно. Питон доказывает, что существует множество способов освежевать кошку.
2. @RolfofSaxony Я думаю, что это была ошибка с моей стороны, но я ошибочно предположил, что рисунок был в абсолютных координатах кадра для обоих изображений. Я был неправ, потому что у кнопок есть их родитель, но это обрабатывалось в цикле, и я немного растерялся. Схема координат, которую я использую, достаточно проста в обслуживании с 7-10 переменными. Большинство элементов в моем пользовательском интерфейсе генерируются в соответствии с отсканированным путем, поэтому имеет смысл создать цикл и сделать его динамичным.