• python tkinter 问题(多个Listbox选取显示问题,虚拟事件的特点为何虚拟,listbox.nearest函数与虚拟事件绑定返回值错误,StringVar类参数调用时单向性,线程无响应)


    多个Listbox选取显示问题:结论是无论在同一个容器控件中(Frame,LabelFrame控件)还是在不同的容器控件中。不会同时显示出多个框中的内容,且如果一个被选取,另一个框中的选取项就消失掉。tkinter工具特点。

     

    listbox.nearest(event.y)与不同事件绑定效果:

      # 有省略的地方

      def show_y(event, listbox):
        print(listbox.nearest(event.y))
      ...
      l1 = listbox(...)
      l1.bind('<Button-1>', lambda event, listbox=l1: show_y(event, l1))

    与Button-1和Double-1都会显示选定项目的索引作为返回值;而绑定事件为ListboxSelect时,不论怎么点都返回0,它总是很特殊,需留意。
    该函数正常时的效果为返回事件绑定(一般就是鼠标点击event)时的那个索引,但它实际上并不是只返回一个索引,如果不点击到某一项上面,
    它还会把最近的那个项目给选取。

    虚拟事件的特点为何虚拟:

    ---凡是对控件进行同样的操作的行为都可以触发一次该事件,就是该控件绑定虚拟事件之后。比如说有Listbox类型的A, A.bind('<<ListboxSelect>>',funB)之后。

    如果在某个函数中对A的项进行选取A.selection_set(index),它就会触发funB。

     

    StringVar类参数调用时单向性:

    tkinter中的很多控件往往都需要一个变量来显示文字内容,比如Button,Label,Entry等等。其中要用到StringVar,IntVar等函数构造出的对象。比如:

      from tkinter import *
      t = Tk()
      t.geometry("500x500+500+150")
      def retr_message(widge):
      print(widge['textvariable'])
      e_str = StringVar()
      e = Entry(t, bg='Magenta', width=20, textvariable=e_str)
      e.pack(side=TOP, fill=X, )
      b = Button(t, text='click', command=lambda: retr_message(e))
      b.pack()
      t.mainloop()

    函数retr_message():想返回传入Entry控件显示的文字内容
    输出为:PY_VAR0 print的类型为str,不能get() 如果不使用StringVar类型e_str.get(),则不能显示该控件的值
    总结就是:从控件方向来显示,此路不通;很不符合编程特性的要去找给控件赋值的StringVar类型,
    但这可能就是tkinter式处理吧。

     

    tkinter中开启线程无响应问题
    Thread().join()该句线程关闭语句在root.mainloop()之前执行就会导致线程无响应。不写反而对。

     

  • 相关阅读:
    【Spring】Spring中的Bean
    【Spring】Spring中的Bean
    【Spring】Spring中的Bean
    【Spring】Spring中的Bean
    简单的订阅发布模式
    setTimeout,setInterval原理
    按圆形轨迹排列元素
    平行四边形导航,背景颜色渐变动画(不支持IE6/7/8)
    html,body的关系
    判断移动端js代码
  • 原文地址:https://www.cnblogs.com/s1mplelectronic/p/13972127.html
Copyright © 2020-2023  润新知