python小白询问如何给wxpython中循环初始化的按钮绑定不同的事件,以及在frame中添加一个拖动块
我想完成用BitmapButton做的电子相册预览,一行6个位图按钮,点击其中一个按钮,都会弹出相关的figure展示它们。但不知循环绑定出了什么问题,点击一次后不能弹出对应的figure,只会弹出最后一个图的figure,且再次点击别的按钮会报错:MatplotlibDeprecationWarning: Passing the block parameter of show() positionally is deprecated since Matplotlib 3.1; the parameter will become keyword-only in 3.3.self.tk.mainloop(n)
代码如下:
程序代码:
import wx from PIL import Image import matplotlib.pyplot as plt import os import tkinter import re import pygame class MyFrame(wx.Frame): # 子类化框架对像 def __init__(self, parent): # 定义子类构造器,i,j为pos的横纵坐标 i = 10 j = 10 h = 1 wx.Frame.__init__(self, parent, -1, 'TextEntryDialog', pos=(300, 200), size=(1000, 1000)) # 调用父类构造器(必须) panel = wx.Panel(self) # 创建画板,控件容器 for f in os.listdir(r'e:\photo2'): newpath = r'e:\photo2' + "\\" + f print(newpath) #wx.Frame.__init__(self, parent, -1, 'TextEntryDialog', pos=(300, 200), size=(1000, 1000)) #panel = wx.Panel(self) # 创建画板,控件容器 pic = wx.Image(newpath, wx.BITMAP_TYPE_BMP).ConvertToBitmap() # 载入bmp图片 self.button = wx.BitmapButton(panel, -1, pic, pos=(i, j), size=(150, 300)) # 创建bmp按钮 #plt.figure(10) # f = path + '\\' + name im = Image.open(newpath) print(im.size) plt.imshow(im) plt.axis('off') # 成功进行到这里 #self.Bind(wx.EVT_BUTTON, self.Destroy, self.button) # 绑定bmp按钮事件 self.Bind(wx.EVT_BUTTON, plt.show, self.button) # 绑定bmp按钮事件 i = i + 170 h = h + 1 if h > 6: h = 1 i = 10 j = j + 310 def onclick(self): for f in os.listdir(r'e:\photo2'): newpath = r'e:\photo2' + "\\" + f print(newpath) im = Image.open(newpath) print(im.size) plt.imshow(im) plt.axis('off') if __name__ == '__main__': appl = wx.App() #app = wxGUI() #app.MainLoop() a = a=MyFrame(parent=None) #a.__init__(parent=None) a.Show(True) appl.MainLoop()运行代码结果如下: