Python 3.x wxPython:具有滚动条的可更新静态位图 客观的
Python 3.x wxPython:具有滚动条的可更新静态位图 客观的,python-3.x,user-interface,wxpython,Python 3.x,User Interface,Wxpython,StaticBitmap,可通过主框架的方法更新,并具有滚动条 细节 我想在sizer的第一个单元格中添加一个图像(StaticBitmap)。问题是图像被裁剪,没有卷轴 无法缩放图像以适应单元格。这不是我的程序所需要的 上传的代码显示了我最后一次让它工作的尝试。我试图将静态位图包装在滚动面板中。直到我更新位图(函数update\u crnt\u bm)并调整帧的大小,此操作才会停止 代码 从PIL导入图像 导入wx 将wx.lib.Scrolled面板作为scrl导入 类按钮(wx.按钮):
StaticBitmap
,可通过主框架的方法更新,并具有滚动条
细节
我想在sizer的第一个单元格中添加一个图像(StaticBitmap
)。问题是图像被裁剪,没有卷轴
无法缩放图像以适应单元格。这不是我的程序所需要的
上传的代码显示了我最后一次让它工作的尝试。我试图将静态位图
包装在滚动面板
中。直到我更新位图(函数update\u crnt\u bm
)并调整帧的大小,此操作才会停止
代码
从PIL导入图像
导入wx
将wx.lib.Scrolled面板作为scrl导入
类按钮(wx.按钮):
def u u init u u;(self、parent、label、action=None):
super()
self.Bind(wx.EVT_按钮,动作)
类ImgPanel(滚动面板):
''带图像的滚动面板''
定义初始化(自、父、位图):
super()。\uuuu init\uuuu(父级)
self.img_sizer=wx.BoxSizer(wx.VERTICAL)
self.sbm=wx.StaticBitmap(self,bitmap=bitmap)
self.img_sizer.Add(self.sbm,1,wx.EXPAND)
self.setizer(self.img_sizer)
self.SetupScrolling()
self.Bind(wx.EVT_大小,self.on_大小)
def load_bm(自身,位图):
self.sbm.Destroy()
self.sbm=wx.StaticBitmap(self,bitmap=bitmap)
def on_resize(自我,事件):
super().Layout()
类大型机(wx.Frame):
定义初始化(自我,fns):
super()
self.resized=False
如果len(fns)<1:
打印('请至少选择一张图像')
出口(1)
self.fns=fns
self.init_面板()
self.Show()
def侧_杆(自身):
sizer=wx.GridBagSizer()
对于i,枚举中的fn(self.fns):
bttn=按钮(self.panel,'Image#'+str(i),self.getupd_crnt_bm(fn))
添加(bttn,位置=(i,0))
回程浆纱机
def初始面板(自身):
self.panel=wx.panel(self)
self.sizer=wx.GridBagSizer()
self.sizer.Add(self.side_bar(),pos=(0,1))
self.img_panel=ImgPanel(self.panel,self.open_bm(self.fns[0]))
self.sizer.Add(self.img_面板,pos=(0,0),flag=wx.EXPAND)
self.sizer.addgrowtablecol(0)
self.sizer.addGrowtableRow(0)
自配面板设置尺寸(自配尺寸器)
def getupd_crnt_bm(自我,fn):
def更新\u crnt\u bm(事件):
bm=self.img_to_bm(Image.open(fn))
自调式仪表盘负载(bm)
自电流_bm=bm
返回更新\u crnt\u bm
def open_bm(自身,fn):
将self.img_返回到_bm(Image.open(fn))
def img_至_bm(自我,图像):
比例=0.3
image=image.resize((int(image.size[0]*比例),int(image.size[1]*比例)))
宽度,高度=image.size
bm=wx.Bitmap.FromBuffer(宽度、高度、图像.tobytes())
返回bm
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
fns=['image0.jpg','image1.jpg','image2.jpg']
app=wx.app()
帧=主机(fns)
app.MainLoop()
版本
- Python 3.6.5
- wx 4.0.1都市固体废物(凤凰城)
- PIL 1.1.7
StaticBitmap
必须再次添加到一个sizer中。这是现在的load\u bm
功能。(不敢相信这是如此明显)
此外,滚动状态设置为0。这将强制在滚动面板的左上角添加图像
def load_bm(self, bitmap):
self.sbm.Destroy()
self.Scroll(0,0)
self.sbm = wx.StaticBitmap(self, bitmap=bitmap)
self.img_sizer.Add(self.sbm, 1, wx.EXPAND)