#wxpython#
定义了宏变量folderpath(图片文件所在文件夹),通过bitmap显示图片。
设置了文件夹,将open键与open函数绑定,执行open函数改变folderpath的值,重新执行initUI函数。print(folderpath)发现它的值改变了显示的图片未改变。
部分源码如下:
# moving.py
import wx
from PIL import Image
import cv2
import xml.dom.minidom
import xml.etree.ElementTree as ET
import os
from tkinter import messagebox
import imtools
import folder_open
folderpath = 'D:/YiShuang/work/Python_codes/OCR'
flag = 0 # 显示图片的顺序
class OCR(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self,parent,pos=wx.DefaultPosition,style=wx.DEFAULT_FRAME_STYLE^(wx.MAXIMIZE_BOX),size=(1200,800))
self.Center()
self.InitUI()
def InitUI(self):
print(folderpath)
panel = wx.Panel(self)
self.bmps = []
alllabel = []
i = 0
#菜单栏
menubar = wx.MenuBar()
filemenu1 = wx.Menu()
filemenu2 = wx.Menu()
menu1 = filemenu1.Append(-1,'open')
menu2 = filemenu1.Append(-1,'save')
menu3 = filemenu2.Append(-1,'last')
menu4 = filemenu2.Append(-1,'next')
menu5 = filemenu2.Append(-1,'delete label')
menu6 = filemenu2.Append(-1,'revise')
menu7 = filemenu2.Append(-1,'comfirm')
self.Bind(wx.EVT_MENU,self.open,menu1)
self.Bind(wx.EVT_MENU,self.save,menu2)
self.Bind(wx.EVT_MENU,self.last,menu3)
self.Bind(wx.EVT_MENU,self.next,menu4)
self.Bind(wx.EVT_MENU,self.delete_label,menu5)
self.Bind(wx.EVT_MENU,self.revise,menu6)
self.Bind(wx.EVT_MENU,self.comfirm,menu7)
menubar.Append(filemenu1,'file')
menubar.Append(filemenu2,'edit')
self.SetMenuBar(menubar)
#放大图片区
self.enlarge_images = wx.StaticBitmap(panel,pos=(0,0),size=(1200,100))
self.enlarge_images.SetBackgroundColour("white")
self.text_annotation = wx.StaticText(panel,label='文本标识',pos=(300,505),size=(600,20),style=wx.ALIGN_CENTER_HORIZONTAL)
self.text_annotation.SetBackgroundColour("white")
#图片文件列表
list1 = imtools.get_imlist(folderpath)
list2 = []
for i in list1:
self.bmps.append(wx.Bitmap(i,wx.BITMAP_TYPE_ANY))
list2.append(os.path.split(i)[1])
self.images_list = wx.ListBox(panel,-1,pos=(0,105),size=(295,625),choices=list2,style=wx.LB_SINGLE)
# self.bmps
#显示图片区域
self.images = wx.StaticBitmap(panel,bitmap=self.bmps[flag],pos=(300,105),size=(600,400))
self.images.SetBackgroundColour("white")
#显示图片标注
isXml = isxml(folderpath)
if isXml:
alllabel = showXml(folderpath)
# 显示标注内容
self.label_list = wx.ListBox(panel,-1,pos=(905,105),size=(295,625),choices=alllabel,style=wx.LB_SINGLE)
#输入文本标识
self.annotation = wx.TextCtrl(panel,pos=(300,530),size=(600,200),style=wx.TE_PROCESS_ENTER)#无此style则enter事件绑定无效
self.Bind(wx.EVT_TEXT_ENTER,self.mark_completion,self.annotation)
def open(self,event):
global flag
global folderpath
flag = 0 # 每次打开时显示该文件夹第一张图片
folderpath = folder_open.folder()
# # 重新显示图片
# list1 = imtools.get_imlist(folderpath)
# list2 = []
# # print(list2)
# for i in list1:
# list2.append(os.path.split(i)[1])
# image = cv2.imread(list2[flag])
# image_new = resizeBitmap(image)
# height, width = image_new.shape[:2]
# image2 = wx.Bitmap.FromBuffer(width,height,BGR_to_RGB(image_new))
# self.images = wx.StaticBitmap(self,-1,bitmap=image2,pos=(300,105),size=(600,400))
# # 重新显示文件列表
# self.images_list = wx.ListBox(self,-1,pos=(0,105),size=(295,625),choices=list2,style=wx.LB_SINGLE)
self.InitUI()
def main():
app = wx.App()
ex = OCR(None, title='labelTool')
ex.Show()
app.MainLoop()
if __name__ == '__main__':
main()
好难好难,想不懂,
你的open里flag的值不是没有改变吗?每次读到的image都一样。
不知道你这个问题是否已经解决, 如果还没有解决的话: