相关疑难解决方法(0)

Tkinter - 无法绑定箭头键事件

我试图将左右箭头键绑定到Tkinter中的事件,但是当我运行程序时,它似乎没有触发事件.这是代码:

from Tkinter import *

main = Tk()

def leftKey(event):
    print "Left key pressed"

def rightKey(event):
    print "Right key pressed"

frame = Frame(main, width=100, height=100)
frame.bind('<Left>', leftKey)
frame.bind('<Right>', rightKey)
frame.pack()
frame.mainloop()
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?

python tkinter

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

如何在Tkinter Text小部件中绑定自我事件后,它将被Text小部件绑定?

我想在Text窗口小部件类绑定之后绑定自身事件,以便在调用绑定函数时更改窗口小部件的文本.例如self.text.bind("<Key>", self.callback),在"文本"窗口小部件中的内容更改之前调用我的绑定.

python events binding text tkinter

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

Python Tkinter:将keypress事件绑定到ttk.Notebook中的Active Tab

摘要

在Python Tkinter应用程序中,使用时ttk.Notebook,如何绑定按键事件,以便仅在包含生成事件的帧的选项卡处于活动状态时触发(即,对于按钮热键,如何仅在按钮时捕获事件在活动标签上)?

详情

我正在编写一个Tkinter应用程序(我的第一个),它使用一个ttk.Notebook对象来管理界面的多个部分.我有多个选项卡,其中一些选项卡上有"相同"按钮,但它们具有不同的操作,具体取决于哪个选项卡处于活动状态(即,一个选项卡上的"保存"按钮仅保存该选项卡中的项目,而不是所有标签).

直观的方法是将事件绑定到帧,然后包含"活动"对象的帧将捕获事件,但这似乎不起作用.但是,如果我将事件绑定到根窗口,则无论选项卡上下文如何,都会调用相同的处理程序.

我认为这是一个常见的要求,但我无法找到有关如何执行此操作的信息.

我使用的是Python 3.4.3.

MCVE

这是一个最小的例子,它展示了我观察到的行为.它生成一个带有五个选项卡的主窗口,每个选项卡都有一个事件绑定Alt-t,它应该触发该选项卡中框架的事件处理程序.

import tkinter as tk
from tkinter import ttk

class MyTab(ttk.Frame):
    """Frame to be added to each tab of the notebook.

    """

    def __init__(self, master, idx, *args, **kwargs):
        super().__init__(master, *args, **kwargs)
        self._button = ttk.Button(self, text='Tab {}'.format(idx),
                                  command=lambda *args, x=idx: self._handle_button(x, *args),
                                  underline=0)
        self.bind('<Alt-t>', lambda *args, x=idx: self._handle_button(x, *args))
        self._button.pack()
        self.pack()


    def _handle_button(self, x, *args):
        print('Button: Tab {}'.format(x))



class MainWdw(ttk.Frame):
    """Main application window.

    """

    def …
Run Code Online (Sandbox Code Playgroud)

python tkinter ttk python-3.x

6
推荐指数
1
解决办法
732
查看次数

如何在Tkinter中使用一个"绑定"绑定多个小部件?

我想知道如何用一个"绑定"绑定多个小部件.

例如:

我有三个按钮,我想在悬停后改变颜色.

from Tkinter import *

def SetColor(event):
    event.widget.config(bg="red")
    return

def ReturnColor(event):
    event.widget.config(bg="white")
    return

root = Tk()

B1 = Button(root,text="Button 1", bg="white")
B1.pack()

B2 = Button(root, text="Button2", bg="white")
B2.pack()

B3 = Button(root, text= "Button 3", bg="white")
B3.pack()

B1.bind("<Enter>",SetColor)
B2.bind("<Enter>",SetColor)
B3.bind("<Enter>",SetColor)

B1.bind("<Leave>",ReturnColor)
B2.bind("<Leave>",ReturnColor)
B3.bind("<Leave>",ReturnColor)

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

我的目标是只有两个绑定(用于"Enter"和"Leave"事件)而不是上面的六个.

谢谢你的任何想法

python bind tkinter widget

5
推荐指数
2
解决办法
5260
查看次数

Readonly tkinter文本小部件

我想tkinter text widget用作readonly小部件.它应该作为一个transcript领域.我的想法是将这个脚本保留在一个file用户写入任何内容的时候,只需删除小部件的所有内容,然后重新重写.

代码如下所示:

transcript_entry = SimpleEditor()  # SimpleEditor is inherited from ScrolledText
transcript_entry.text.delete("1.0", END)

# this is just a test string, it should be the contents of the transcript file
transcript_entry.text.insert("1.0", "This is test transcript")  
transcript_entry.text.bind("<KeyPress>", transcript_entry.readonly)
Run Code Online (Sandbox Code Playgroud)

readonly功能将类似于:

def readonly(self, event):
    self.text.delete("1.0", END)
    # this is just a test string, it should be the contents of the transcript file
    self.text.insert("1.0", "This is test transcript")
Run Code Online (Sandbox Code Playgroud)

这里的错误是用户输入的最后一个字符被添加到记录中.我怀疑原因是调用了readonly函数,then用户输入被写入窗口小部件.如何反转这个顺序并让readonly函数被调用after用户输入被写入窗口小部件? …

python text tkinter

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

删除tkinter文本默认绑定

我正在制作一个简单的tkinter文本编辑器,但我希望尽可能删除Text小部件的所有默认绑定.

例如,当我按Ctrl + i时,默认情况下会插入一个Tab字符.我做了一个事件绑定,打印文本框中有多少行,我也将事件绑定设置为Ctrl + i.

当我运行它时,它会打印文本框内的行数,但也会插入制表符.

我想知道如何覆盖默认绑定,或者学习如何删除所有默认绑定.

继承了我的代码btw:

from tkinter import *

class comd: # Contains primary commands
    # Capital Rule ----------------------------
    # G = Get | I = Insert | D = Draw | S = Set
    # -----------------------------------------

    def Ggeo(self): # Get Geometry (Get window geometry)
        x = root.winfo_width()
        y = root.winfo_height()
        print("Current Window Geometry")
        print(str(x) + " x " +str(y))

    def Idum(self): # Insters "Dummy Insert"
        import tkinter …
Run Code Online (Sandbox Code Playgroud)

python tkinter widget

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

python tkinter 绑定:如何防止双重事件

我有一个使用 tkinter 和键绑定的 python 程序。该程序调用外部程序,然后询问如何处理它,期望 n 键表示“否”,或 y 键表示“是”。问题:如果我按允许的键两次,第二个键将被存储并稍后处理 - 因此是错误的问题。

import tkinter as tk
import time

class App:
    counter = 0

    def __init__(self, master): # Constructor
        # build GUI
        self.label = tk.Label(text="Press <space>", width=40)
        self.label.grid(row=1, column=1, sticky='w')

        # bind keys to buttons
        master.bind('<Key-space>', self.keyPressed)
        pass # __init__


    def keyPressed(self, event):
        print("Step 1")
        self.counter = self.counter + 1
        self.label.configure(text = str(self.counter))
        self.label.update()
        time.sleep(3)
        print("Step  2")
        pass # Key1Pressed
# End of class App

root = tk.Tk()
root.option_add('*font', ('Arial', 11, 'bold')) …
Run Code Online (Sandbox Code Playgroud)

python tkinter key-bindings keyboard-events

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

Python Tkinter文本修改后的回调

在python 2.7中,每次Tkinter Text小部件中发生更改时,我都试图获取回调。

该程序根据此处找到的代码使用多个帧:在tkinter中的两个帧之间切换

回调部分摘自以下示例:http : //code.activestate.com/recipes/464635-call-a-callback-when-a-tkintertext-is-modified/

两种代码都可以单独很好地工作,但是将这两种代码结合起来对我来说很难。这是我尝试使用尽可能简单的代码。

import Tkinter as tk

class Texter(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        container = tk.Frame(self)
        container.pack()

        self.frames = {}

        for F in (ConnectPage, EditorPage):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        page_name = EditorPage.__name__
        self.frames[page_name] = frame
        self.show_frame(ConnectPage)


    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()

    def get_page(self, page_name):
        return self.frames[page_name]


class ConnectPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)

        button1 = tk.Button(self, text="SecondPage",
                            command=lambda: controller.show_frame(EditorPage))
        button1.grid(row=2, column=3, …
Run Code Online (Sandbox Code Playgroud)

python tkinter callback tkinter.text

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

对Tkinter bind_class感到困惑

我定义了GCanvas,它是Canvas的扩展.我的目的是在类级别绑定到GCanvas.它不起作用.

我也尝试绑定到tk.Canvas,它也不起作用.绑定到rootGCanvas实例或与GCanvas实例绑定工作正常.(这些替代方案对我来说都没有用,但我只是试着看看发生了什么.)运行OS X,El Capitan.

import Tkinter as tk

class GCanvas(tk.Canvas, object):

    def __init__(self, master, **kwargs):
        tk.Canvas.__init__(self, master, kwargs)

    @staticmethod
    def enter(e):
        print "enter", e.widget, e.x, e.y

    @staticmethod
    def leave(e):
        print "leave", e.widget

    @staticmethod
    def motion(e):
        print "motion", e.widget, e.x, e.y

approach = "bindinstance"

root = tk.Tk()
gc = GCanvas(root, width=400, height=300)
print "root is", root, "gc is", gc
gc.pack()

if approach == "bindGCanvas":
    print "binding to GCanvas"
    root.bind_class(GCanvas, '<Enter>', GCanvas.enter)
    root.bind_class(GCanvas, '<Leave>', GCanvas.leave)
    #root.bind_class(GCanvas, '<Motion>', GCanvas.motion)
elif approach …
Run Code Online (Sandbox Code Playgroud)

tkinter python-2.7 tkinter-canvas

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