python gui之tkinter语法杂记

随手写的,后续整理。

1. Entry如何调用父类的__init__?

以下错,原因后续分析

super(Your_Entry_Class, self).__init__(self,**kw)

  报错:TypeError: must be type, not instance 。 莫名其妙

谷歌了下,解决方案如下

apply(Entry.__init__, (self, parent), **kw)

 

2. 如何将ttk treeview 的某一行转入编辑状态

事实上,(python 3)treeview有一个readonly属性。但我用的是python 2。

解决方案:在双击treeview时根据鼠标的位置定位单元格,然后在此单元格里面贴入一个Entry控件即可。引用自stackoverflow

    def on_detail_bom_line_db_click(self, event):
        ‘‘‘ Executed, when a row is double-clicked. Opens
        read-only EntryPopup above the item‘s column, so it is possible
        to select text ‘‘‘

        # close previous popups
        if self.entryPopup:
            self.entryPopup.destroy()

        # what row and column was clicked on

        rowid = self.bom_lines.identify_row(event.y)
        column = self.bom_lines.identify_column(event.x)

        # clicked row parent id
        parent = self.bom_lines.parent(rowid)
        #print ‘parent:‘+parent
        # do nothing if item is top-level
        if parent == ‘‘:
            pass

        # get column position info
        x,y,width,height = self.bom_lines.bbox(rowid, column)

        # y-axis offset
        pady = height // 2

        # place Entry popup properly
        url = self.bom_lines.item(rowid, ‘text‘)

        self.entryPopup = StickyEntry(self.bom_lines, url, width=12)
        self.entryPopup.place( x=x, y=y+pady, anchor=W)

扩展了Entry,添加了一点点行为:

class StickyEntry(Entry):

    def __init__(self, parent, text, **kw):
        ‘‘‘ If relwidth is set, then width is ignored ‘‘‘
        #fa = super(self,StickyEntry)
        #fa.__init__(parent, **kw)
        apply(Entry.__init__, (self, parent), kw)

        self.insert(0, text)
        #self[‘state‘] = ‘readonly‘
        self[‘readonlybackground‘] = ‘white‘
        self[‘selectbackground‘] = ‘#1BA1E2‘
        self[‘exportselection‘] = False

        self.focus_force()
        self.bind("<Control-a>", self.selectAll)
        self.bind("<Escape>", lambda *ignore: self.destroy())

    def selectAll(self, *ignore):
        ‘‘‘ Set selection on the whole text ‘‘‘
        self.selection_range(0, ‘end‘)

        # returns ‘break‘ to interrupt default key-bindings
        return ‘break‘

3. treeview 的 heigth属性咋回事?

比如设置为60(pixels),结果抛出屏幕很多。 原因是这个是行数!!!

4. Entry 的width似乎也不是像素为单位的!

随便设置一个数字,比如20,能有200pixel或者更多的效果。

经过验证,似乎是数字字符的个数(比如20,就刚好能放20个数字字符!)

具体以什么字符为基准未知!

5.如何给ttk treeview设置竖直滚动条?

添加一个Srollbar控件,并将其set函数丢给treeview的yscrollcommand进行绑定。

注意布局,Scrollbar控件最好紧挨着treeview,并且在右边。

vbar = ttk.ScrollBar(container, orient=VERTICAL, command = your_treeview.yview)
your_treeview.configure(yscrollcomand=vbar.set)
your_treeview.grid(row=0)
vbar.grid(row=0, column=1,sticky=NS)

6. 如何将ttk treeview中的内容清空?

调用其delete方法,如下:

items = your_treeview.get_children()
[your_treeview.delete(item) for item in items]

7. 如何得到ttk treeview被双击的单元格的值?

理论上讲,只通过控件是无解的。通过自己定义坐标边界的方式来解决,即给每一列定义宽度(像素单位)。event.x/y能够取到坐标。在分析此坐标落在哪一列的坐标范围内即可分析出。

header_widths=[n1,n2,n3....]
row_selected = your_treeview.identify_row(event.y)
values = your_treeview.item(row_selected,‘values)
cell_val = False
index = -1
t=event.x
for i in range(header_widths):
    if t>0:
        t=t-self.form_bom_line_widths[i]
    else:
        index=i-1
        break
if index!=-1:
    cell_val = values[index]

  

时间: 2024-08-27 16:01:49

python gui之tkinter语法杂记的相关文章

Python GUI with Tkinter (from youtube) 在youtube上能找到很多编程视频...

Python GUI with Tkinter - 1 - Introduction以上链接是一个python tkinter视频系列的第一讲的链接.虽然英语不好,但是,程序还是看得懂的(照着做就可以了),所以找不到中文视频时看下这些英语视频也是可以的. 以下是我在看视频过程中的练习, 可以在python2.7下运行. 001: hello,world: from Tkinter import Label, Tk root = Tk() thelabel = Label(root, text="

python GUI编程(Tkinter)

python GUI编程(Tkinter) python提供了多个图形开发界面的库,几个常用Python GUI库如下: Tkinter: Tkinter模块("Tk 接口")是Python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.,Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中. wxPython:wxPython 是一款开源软件,是 Python 语言的一套优

Python GUI programming(tkinter)

python3之前的版本用Tkinter,之后用的是tkinter 最简单的使用Tkinter的代码,首先要Tk()建立一个窗口,然后加进各种Widget from Tkinter import * window = Tk() label = Label(window, text = "Welcome to Python") button = Button(window, text = "Click me") label.pack() button.pack() w

python GUI学习——Tkinter

支持python的常见GUI工具包: Tkinter 使用Tk平台 很容易得到 半标准 wxpython 基于wxWindows.跨平台越来越流行 Python Win 只能在Windows上使用 使用了本机的Windows GUI功能 Java Swing 只能用于Jython 使用本机的Java GUI PyGTK 使用GTK平台 在linux上很流行 PyQt 使用QT平台 跨平台 Tkinter学习 介绍以下几个控件的用法 Label Frame Entry Text Button Li

Python:GUI之tkinter学习笔记1控件的介绍及使用

相关内容: tkinter的使用 1.模块的导入 2.使用 3.控件介绍 Tk Button Label Frame Toplevel Menu Menubutton Canvas Entry Message Text Listbox Checkbutton Radiobutton Scale Scrollbar 首发时间:2018-03-04 16:39 Python的GUI各有各特点. 由于只是轻微涉及GUI开发,所以就以轻量级的tkinter来学习. tkinter的使用: 1.模块的导入

python GUI编程tkinter示例之目录树遍历工具

摘录 python核心编程 本节我们将展示一个中级的tkinter应用实例,这个应用是一个目录树遍历工具:它会从当前目录开始,提供一个文件列表,双击列表中任意的其他目录,就会使得工具切换到新目录中,用新目录中的文件列表代替旧文件列表.这里新增了列表框.文本框和滚动条,此外还增加了鼠标单击.键盘按下.滚动操作等回调函数.其实,整个应用就是一系列控件和函数的组合. #python 3.6 import os from time import sleep from tkinter import * #

python gui之tkinter事件处理

事件一览表 事件 代码 备注 鼠标左键单击按下 1/Button-1/ButtonPress-1   鼠标左键单击松开 ButtonRelease-1   鼠标右键单击 3   鼠标左键双击 Double-1/Double-Button-1   鼠标右键双击 Double-3   鼠标滚轮单击 2   鼠标滚轮双击 Double-2   鼠标移动 B1-Motion   鼠标移动到区域 Enter   鼠标离开区域 Leave   获得键盘焦点 FocusIn   失去键盘焦点 FocusOut

Python:GUI之tkinter学习笔记2界面布局显示

相关内容: pack 介绍 常用参数 使用情况 常用函数 grid 介绍 常用参数 使用情况 常用函数 place 介绍 常用参数 使用情况 常用函数 首发时间:2018-03-04 14:20 pack: 介绍: pack几何管理器按行或列打包小部件. 可以使用填充fill,展开expand和靠边side等选项来控制此几何体管理器. pack的排放控件的形式就像将一个个控件按大小从上到下放过去 在窗口不设定大小的而使用pack进行布局的情况下,窗口默认大小为刚好包裹所有控件的大小 默认情况下添

Python GUI编程(Tkinter)Label控件

import tkinter win = tkinter.Tk()win.title("sunck")win.geometry("400x400+200+20") '''Label:标签控件可以显示文本'''#win 父窗体#text 显示的文本内容#bg 背景色#fg 字体颜色#wraplength 指定text文本中多宽进行换行#justify 设置换行后的对齐方法#anchor 位置 n北 e东 s南 w西 center居中 ne se sw nwlabel