On 5/19/2016 4:10 PM, Mike Driscoll wrote:
On Thursday, May 19, 2016 at 11:23:53 AM UTC-5, Terry Reedy wrote:

In my case, I learned better how to test IDLE from a user perspective.
For tkinter apps, an external program such as Selenium is not needed.
Tk/tkinter have the simulated event generation and introspection needed
to simulate a user hitting keys, clicking mouse buttons, and reading the
screen.

I am curious. Where is this documented? Are you referring to calling
> the invoke() method on each widget?

For widget commands, yes.  (And thanks for reminding of the method.)

For events:
http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/universal.html
(An indispensible tkinter reference) says:
'''
w.event_generate(sequence, **kw)

This method causes an event to trigger without any external stimulus. The handling of the event is the same as if it had been triggered by an external stimulus. The sequence argument describes the event to be triggered. You can set values for selected fields in the Event object by providing keyword=value arguments, where the keyword specifies the name of a field in the Event object.

    See Section 54, “Events” for a full discussion of events.
'''
This omits some essentials.  tcl.tk/man/tcl8.6/TkCmd/event.htm
has much more, including the need to put focus on Text and Entry.

From Stackoverflow, I learned that .update() is needed *before* .event_generate. The following works.

import tkinter as tk
root = tk.Tk()
def prt():
    print('Handler called')
button = tk.Button(root, text='Click', command=prt)
button.place(x=20, y=20)
def ev(e):
    print(e.x, e.y)
button.bind('<ButtonPress-1>', ev)
button.update()
button.event_generate('<ButtonPress-1>', x=0, y=0)
button.event_generate('<ButtonRelease-1>')
button.invoke()
entry=tk.Entry(root)
entry.place(x=20, y=50)
entry.focus_force()
entry.update()
entry.event_generate('<Key-a>')

The event is reported, the handler is called, and 'a' is inserted. (Inserting text could be done more easily, but some key events such as <Key-End> do have text equivalents.)

--
Terry Jan Reedy



--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to