Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x wxPython:具有滚动条的可更新静态位图 客观的_Python 3.x_User Interface_Wxpython - Fatal编程技术网

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)