python图形化编程小记

以下问题分别记录:

  1. 导入模块时,如果采取import x方式,后续对x内的变量及方法进行调用时需要使用x.y形式;
  2. 关于Tkinter需要根据变量值时刻改变的方法:e=Tkinter.StringVar()使用该函数可以创建e来存储这个变量,需要注意的时,如果该变量的声明在调用之前,e.get()会返回空值,而不是报错;
  3. 关于button的绑定命令,button=Tkinter.Button(top,text='search',command=search)其中search函数在指定时不能加(),
  4. 关于name.bind('',search)其中的return表示回车,enter表示输入,且该部分输入值会自动传递给search作为参数;
  5. top = Tkinter.Tk()
    top.geometry('150x150')
    在使用时需要注意,150和150之间为x,不是*
  6. 关于下面神奇的调用与返回
    “`def init(self):
    self.top = Tkinter.Tk()
    self.top.geometry(‘550x350’)

    self.e=Tkinter.StringVar()
    self.r=Tkinter.StringVar()
    self.l=Tkinter.StringVar()
    self.name=Tkinter.Entry(self.top,width=550,textvariable=self.e)
    print 1 
    self.name.bind('',self.search)
    self.name.pack()
    self.scr=Tkinter.Scrollbar(self.top)
    self.scr.pack(side=Tkinter.RIGHT,fill=Tkinter.Y)
    self.list=Tkinter.Listbox(self.top,height=11,width=550,yscrollcommand=self.scr.set)
    self.list.bind('',self.refer)
    self.scr.config(command=self.list.yview)
    self.list.pack()
    print 1
    
    self.button=Tkinter.Button(self.top,text='search',command=self.search)
    self.button.pack()
    

    def refer(self,link, ev=None):
    link=self.list.get(self.list.curselection())
    link=link.split(‘:’)[-1]
    webbrowser.open(link)

    def r_label(self, ev=None):
    if self.r.get()!=”:
    link=(self.r.get()).split(‘\n’)
    for each in link:
    print each
    self.list.insert(Tkinter.ACTIVE,each)

    def search(self, ev=None):
    print 1
    name_s=self.e.get()
    index_s=update.up_bilibili(name_s)
    self.r.set(index_s)
    self.r_label()

    其中
    self.name.bind(‘’,self.search)部分会默认返回值,需要在对应函数中def search(self, ev=None):“`填充ev=None,原因不明;

  7. 关于绑定函数时,如果带有()会默认执行;

  8. 对于Tkinter组件,可以使用方法update()使其更新参数,比如canvas的尺寸、内容,标签的内容等;
  9. 每次调用Tkinter.Canvas均为重新调用创建组件;
  10. 最初计划在函数中刷新canvas的图片内容,出现了一个BUG:当执行到CANVAS2的刷新动作时,CANVAS1的内容会变为空白,最后发现是因为在函数内使用了self.photo变量来生成图片内容,但self.photo在函数退出时被清理掉了,所以最后显示空白。如下:
        self.url=cover.decode('unicode_escape')
        self.file = urllib2.urlopen(urllib2.Request(self.url))
        self.tmpIm = cStringIO.StringIO(self.file.read())
        self.image = Image.open(self.tmpIm)
        self.photo = ImageTk.PhotoImage(self.image)
        self.dilidili_canvas.create_image(120,150,image=self.photo)
        self.dilidili_canvas.config(height=200,width=200)

因为需要在canvas定义时定义一个全局变量,在函数中对全局变量进行修改即可;

你可能感兴趣的:(python)