相关疑难解决方法(0)

如何在Tkinter小部件值更改时运行代码?

我正在使用Python Tkinter,而且我希望onchange从其他工具包/语言中获得相当于的事件.我希望每当用户更新某些小部件的状态时运行代码.

就我而言,我有很多Entry,Checkbutton,SpinboxRadiobutton小部件.每当这些更改中的任何一个,我想运行我的代码(在这种情况下,更新另一个面板上的文本框).

(只需记住用户可以使用鼠标或键盘与这些小部件进行交互,甚至使用Ctrl + V粘贴文本)

python events tkinter

12
推荐指数
4
解决办法
2万
查看次数

使用tk创建文本编辑器

是否可以使用tk创建text editor可以支持的内容syntax highlighting,autocomplete甚至可以在以后扩展IDE为特定语言?

我找到了tkinterwidget,但不确定它是否可以支持?

我认为如果一个小部件可以在用户编写文本时对文本进行一些处理,那么它可以用于此目的.

text tk-toolkit editor tkinter

7
推荐指数
1
解决办法
6605
查看次数

<Key> 事件的按键代码是否与平台无关?

我想为我的文本编辑器创建行号,但这有点复杂:Tkinter将行号添加到文本小部件

所以我决定创建一个行和列计数器,就像在IDLE. 为了实现这个目标,我决定监听小部件<Key>上生成的事件tkinter.Text我不知道事件对象有哪些属性,所以我决定查看该类的源代码Event(最好的教程之一:D),我发现有两个主要属性对我来说很有趣目标,即keycodechar

我的问题是,这个keycodes平台是独立的吗?我希望我的文本编辑器可以在所有平台上工作,而不会出现未定义的行为,因为keycodes.

这是我想做的一个简单实用的功能示例:

from tkinter import *

lines = 1
columns = 0

ARROWS = (8320768, 8124162, 8255233, 8189699)

def on_key_pressed(event=None):
    global columns, lines

    if event.keycode == 3342463: # return
        if columns > 0 and lines > 0:
            columns -= 1
            if columns < 0: # decrease lines if columns < 0
                columns = 0
                lines -= 1
        if …
Run Code Online (Sandbox Code Playgroud)

python tkinter line python-3.x

5
推荐指数
1
解决办法
4184
查看次数

tkinter.Text:将变量绑定到窗口小部件文本内容

使用Python 3.3平台独立于此问题.

对于Entry窗口小部件,您可以将变量绑定到此窗口小部件的文本内容,如下所示(请注意构造函数中的textvariable参数Entry):

var = tkinter.StringVar()
entryField = tkinter.Entry(master, textvariable=var)
e.pack()

var.set("a new value") # entryField text now updated with this value
s = var.get() # whatever text now appears in entryField
Run Code Online (Sandbox Code Playgroud)

Text然而,对于小部件,没有这样的变量绑定功能.Text如果感兴趣的话,类定义应该可以从%python dir%/ Lib/tkinter/__ init__.py中的第2927行开始,适用于Windows版本中的Python 3.3.

如何使用Text窗口小部件最好地模拟此变量绑定功能?我的想法是将一个小部件绑定tkinter.StringVar到一个Text小部件,然后获取/设置所有文本.

更新:

我最终继承tkinter.Frame作为一个Text包装器,它接受一个textvariable期望作为tkinter.Variable实例的构造函数参数.我下面的例子中我唯一没有继承的Text原因只是因为我也想要一个滚动条,但这并不重要.

以下是我的实验代码.为了与我原来的问题以及问题如何解决(?)完全相关,重要的是self.textvariable.get = self.GetTextself.textvariable.set = self.SetText.基本上,我正在覆盖传入tkinter.Variable对象的get和set方法到我自己的设备......

class TextExtension( tkinter.Frame ): …
Run Code Online (Sandbox Code Playgroud)

python tkinter python-3.x

4
推荐指数
1
解决办法
2万
查看次数

文本不包含任何用“sel”标记的字符 tkinter

我最近阅读了受人尊敬的 Bryan Oakley( Tkinter 添加行号到文本小部件)撰写的答案,其中他展示了有关解决问题的示例代码。

当我尝试处理该代码时,它工作正常,直到我复制或粘贴某些内容,即按Ctrl+CCtrl+V。它关闭了 tkinter 窗口并出现以下错误:

_tkinter.TclError: text doesn't contain any characters tagged with "sel"

这是代码:

import tkinter as tk

class TextLineNumbers(tk.Canvas):
    def __init__(self, *args, **kwargs):
        tk.Canvas.__init__(self, *args, **kwargs)
        self.textwidget = None

    def attach(self, text_widget):
        self.textwidget = text_widget

    def redraw(self, *args):
        '''redraw line numbers'''
        self.delete("all")

        i = self.textwidget.index("@0,0")
        while True :
            dline= self.textwidget.dlineinfo(i)
            if dline is None: break
            y = dline[1]
            linenum = str(i).split(".")[0]
            self.create_text(2,y,anchor="nw", text=linenum)
            i = self.textwidget.index("%s+1line" % i)

class CustomText(tk.Text): …
Run Code Online (Sandbox Code Playgroud)

python tkinter python-3.x

4
推荐指数
1
解决办法
1020
查看次数

文本小部件 Tkinter 中的行号间距

我按照 Bryan Oakley 的代码在此处向文本小部件添加行号功能。我正在该文本框中插入我自己的 XML 文件。该文件列出如下:

myFile.xml

<?xml version="1.0" encoding="UTF-8" standalone="no" ?>

<p1:sample1 xmlns:p1="http://www.example.org/eHorizon">

   <p1:time nTimestamp="5">
      <p1:location hours = "1" path = '1'>
         <p1:feature color="6" type="a">560</p1:feature>
         <p1:feature color="2" type="a">564</p1:feature>
         <p1:feature color="3" type="b">570</p1:feature>
         <p1:feature color="4" type="c">570</p1:feature>
      </p1:location>
   </p1:time>

   <p1:time nTimestamp="6">
      <p1:location hours = "1" path = '1'>
         <p1:feature color="2" type="a">564</p1:feature>
         <p1:feature color="3" type="b">570</p1:feature>
         <p1:feature color="4" type="c">570</p1:feature>
      </p1:location>
   </p1:time>

</p1:sample1>
Run Code Online (Sandbox Code Playgroud)

myCode.py

import Tkinter as tk

class TextLineNumbers(tk.Canvas):
    def __init__(self, *args, **kwargs):
        tk.Canvas.__init__(self, *args, **kwargs)
        self.textwidget = None

    def attach(self, text_widget): …
Run Code Online (Sandbox Code Playgroud)

python xml tkinter

3
推荐指数
1
解决办法
1810
查看次数

绑定到光标移动不会更改INSERT标记

每次用户通过箭头,鼠标点击等更改插入点时,我都需要执行快速检查...所以我这样绑定它:

text.bind("<Button-1>", insertchanged)

def insertchanged(event):
    pos=text.index(INSERT)
    n=text.tag_names(INSERT)
        ...
Run Code Online (Sandbox Code Playgroud)

但我发现在用户改变之前 pos仍然是位置!如何找到新职位(一般解决方案,如果可能的话:我必须将其绑定到home,end,pgup,pgdown,...)

谢谢!

python user-interface tkinter

2
推荐指数
1
解决办法
865
查看次数

标签 统计

tkinter ×7

python ×6

python-3.x ×3

editor ×1

events ×1

line ×1

text ×1

tk-toolkit ×1

user-interface ×1

xml ×1