Я кодирую Python 2.7, и я пытаюсь изменить фоновое растровое изображение на основе выбора переключателя пользователя из выпадающего меню в другом окне. В прикрепленном коде изображение Bitmap0 является значением по умолчанию. Выбрав меню «Фото», затем пункт меню «Изменить фотографию» вызывает радиоканал. Я хочу иметь возможность выбрать Bitmap1 и изменить изображение растрового изображения на изображение Bitmap1.Пользовательское изменение растрового изображения
Я безуспешно пытался pubsub, и я никогда не был уверен в том, как модуль pubsub вписывается в Python. Разве это невозможно, если вы правильно доберетесь до правильных переменных?
Мой упрощенный код выглядит следующим образом:
import wx
IPaa0 = 0
bgphoto = "bitmap" + str(IPaa0) + ".bmp"
print bgphoto
_ID_Item0 = wx.NewId()
_ID_Item1 = wx.NewId()
_ID_Item2 = wx.NewId()
_ID_Item3 = wx.NewId()
_ID_Item4 = wx.NewId()
_ID_Item5 = wx.NewId()
class cPanel(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
def TogFot(self, fotnum):
print "TogFot Entered"
class aFotoDir(wx.App):
def OnInit(self):
iMainFrame = cMainFrame("Top Frame", (0, 0), (1200, 900))
iMainFrame.Show()
self.SetTopWindow(iMainFrame)
return True
class cMainFrame(wx.Frame):
def __init__(self, title, pos, size):
wx.Frame.__init__(self, None, -1, title, pos, size)
iPanel = cPanel(self)
MenuBar = wx.MenuBar()
mFile = wx.Menu()
MenuBar.Append(mFile, "File")
mFoto = wx.Menu()
MenuBar.Append(mFoto, "Photo")
self.SetMenuBar(MenuBar)
MenuItem0 = wx.Menu()
mFile.Append(_ID_Item0, "Open")
MenuItem1 = wx.Menu()
mFile.Append(_ID_Item1, "Save")
MenuItem2 = wx.Menu()
mFile.Append(_ID_Item2, "Save As")
MenuItem3 = wx.Menu()
mFile.Append(_ID_Item3, "Close")
MenuItem4 = wx.Menu()
mFile.Append(_ID_Item4, "Exit")
MenuItem5 = wx.Menu()
mFoto.Append(_ID_Item5, "Change Photo")
self.Bind(wx.EVT_MENU, self.ClickChFoto, id = _ID_Item5)
img0 = wx.Image(bgphoto, wx.BITMAP_TYPE_ANY)
img1 = wx.StaticBitmap(iPanel, -1, wx.BitmapFromImage(img0))
def ClickChFoto(self, event):
iSecondFrame = cSecondFrame("Input", (50, 0), (400, 300))
iSecondFrame.Show()
return True
class cSecondFrame(cMainFrame):
def __init__(self, title, pos, size):
wx.Frame.__init__(self, None, -1, title, pos, size)
iSecondPanel = wx.Panel(self, -1)
iBut0 = wx.Button(iSecondPanel, -1, "OK", pos = (75, 200))
iBut1 = wx.Button(iSecondPanel, -1, "CANCEL", pos = (225, 200))
Plist = ["Bitmap0", "Bitmap1"]
self.iWid0 = wx.RadioBox(iSecondPanel, -1, "Photo Selection", (50, 50),
(200, 100), Plist, 1, wx.RA_SPECIFY_COLS)
self.Bind(wx.EVT_BUTTON, self.ClickOK, iBut0)
self.Bind(wx.EVT_BUTTON, self.ClickCANCEL, iBut1)
def ClickOK(self, event):
print "OK Clicked"
global IPaa0
IPaa0 = self.iWid0.GetSelection()
print IPaa0
global bgphoto
bgphoto = "bitmap" + str(IPaa0) + ".bmp"
print bgphoto
self.Close(True)
def ClickCANCEL(self, event):
print "CANCEL Clicked"
self.Close(True)
#-------------------------------------------------------------------------------
if __name__ == "__main__":
app = aFotoDir(False)
app.MainLoop()
Файлы изображений являются только два файла с названиями «Bitmap0» и «Bitmap1». Я не знал протокол для загрузки изображений, и они были размером более 6 МБ, поэтому я не загружал.
Буду признателен за любое руководство и инструкцию.
Хммм. Спасибо пользователю 2963623. Вы обнаружили еще один пробел в моих знаниях, я не знаю, как это сделать. Я возвращаюсь к книге О'Рейли Лутца, чтобы заполнить пробел. Есть ли у вас другая рекомендация? –
user2963623, так как вы единственный, кто пытается мне помочь, могу ли я попросить вас изменить мой код, чтобы реализовать ваше предложение. Мне непонятно, как ссылаться на cMainFrame в __init__ of cSecondFrame, а затем использовать его? Я получил сообщение об ошибке, в котором говорилось, что у меня слишком много аргументов, когда я добавляю cMainFrame в качестве аргумента для __init__ cSecondFrame. Заранее спасибо. –
Я посмотрю. Дайте мне несколько дней – user2963623