python图形化编程小记

本文记录了Python使用Tkinter进行图形化编程时遇到的问题与解决方法,包括导入模块的方式、变量实时更新、Button绑定命令的注意事项、回车与输入的区别,以及Canvas内容更新的Bug和解决方案。通过实例解析了Tkinter组件的操作和函数调用的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下问题分别记录:

  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('<Return>',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('<Return>',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('<Double-1>',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定义时定义一个全局变量,在函数中对全局变量进行修改即可;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值