Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b6ca62e

Browse filesBrowse files
serhiy-storchakamiss-islington
authored andcommitted
Add Tkinter tests for different events (pythonGH-118778)
(cherry picked from commit b683994) Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
1 parent 1dc7fcd commit b6ca62e
Copy full SHA for b6ca62e

File tree

Expand file treeCollapse file tree

1 file changed

+278
-0
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+278
-0
lines changed

‎Lib/test/test_tkinter/test_misc.py

Copy file name to clipboardExpand all lines: Lib/test/test_tkinter/test_misc.py
+278Lines changed: 278 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,6 +532,284 @@ def test_wm_attribute(self):
532532
1.0 if self.wantobjects else '1.0')
533533

534534

535+
class EventTest(AbstractTkTest, unittest.TestCase):
536+
537+
def test_focus(self):
538+
f = tkinter.Frame(self.root, width=150, height=100)
539+
f.pack()
540+
self.root.wait_visibility() # needed on Windows
541+
self.root.update_idletasks()
542+
543+
events = []
544+
f.bind('<FocusIn>', events.append)
545+
546+
f.focus_force()
547+
self.root.update()
548+
self.assertEqual(len(events), 1, events)
549+
e = events[0]
550+
self.assertIs(e.type, tkinter.EventType.FocusIn)
551+
self.assertIs(e.widget, f)
552+
self.assertIsInstance(e.serial, int)
553+
self.assertEqual(e.time, '??')
554+
self.assertIs(e.send_event, False)
555+
self.assertFalse(hasattr(e, 'focus'))
556+
self.assertEqual(e.num, '??')
557+
self.assertEqual(e.state, '??')
558+
self.assertEqual(e.char, '??')
559+
self.assertEqual(e.keycode, '??')
560+
self.assertEqual(e.keysym, '??')
561+
self.assertEqual(e.keysym_num, '??')
562+
self.assertEqual(e.width, '??')
563+
self.assertEqual(e.height, '??')
564+
self.assertEqual(e.x, '??')
565+
self.assertEqual(e.y, '??')
566+
self.assertEqual(e.x_root, '??')
567+
self.assertEqual(e.y_root, '??')
568+
self.assertEqual(e.delta, 0)
569+
self.assertEqual(repr(e), '<FocusIn event>')
570+
571+
def test_configure(self):
572+
f = tkinter.Frame(self.root, width=150, height=100)
573+
f.pack()
574+
self.root.wait_visibility() # needed on Windows
575+
self.root.update_idletasks()
576+
577+
events = []
578+
f.bind('<Configure>', events.append)
579+
580+
f.configure(height=120, borderwidth=10)
581+
self.assertEqual(len(events), 1, events)
582+
e = events[0]
583+
self.assertIs(e.type, tkinter.EventType.Configure)
584+
self.assertIs(e.widget, f)
585+
self.assertIsInstance(e.serial, int)
586+
self.assertEqual(e.time, '??')
587+
self.assertIs(e.send_event, False)
588+
self.assertFalse(hasattr(e, 'focus'))
589+
self.assertEqual(e.num, '??')
590+
self.assertEqual(e.state, '??')
591+
self.assertEqual(e.char, '??')
592+
self.assertEqual(e.keycode, '??')
593+
self.assertEqual(e.keysym, '??')
594+
self.assertEqual(e.keysym_num, '??')
595+
self.assertEqual(e.width, 150)
596+
self.assertEqual(e.height, 100)
597+
self.assertEqual(e.x, 0)
598+
self.assertEqual(e.y, 0)
599+
self.assertEqual(e.x_root, '??')
600+
self.assertEqual(e.y_root, '??')
601+
self.assertEqual(e.delta, 0)
602+
self.assertEqual(repr(e), '<Configure event x=0 y=0 width=150 height=100>')
603+
604+
def test_event_generate_key_press(self):
605+
f = tkinter.Frame(self.root, width=150, height=100)
606+
f.pack()
607+
self.root.wait_visibility() # needed on Windows
608+
self.root.update_idletasks()
609+
610+
events = []
611+
f.bind('<KeyPress>', events.append)
612+
f.focus_force()
613+
614+
f.event_generate('<Alt-z>')
615+
self.assertEqual(len(events), 1, events)
616+
e = events[0]
617+
self.assertIs(e.type, tkinter.EventType.KeyPress)
618+
self.assertIs(e.widget, f)
619+
self.assertIsInstance(e.serial, int)
620+
self.assertEqual(e.time, 0)
621+
self.assertIs(e.send_event, False)
622+
self.assertFalse(hasattr(e, 'focus'))
623+
self.assertEqual(e.num, '??')
624+
self.assertIsInstance(e.state, int)
625+
self.assertNotEqual(e.state, 0)
626+
self.assertEqual(e.char, 'z')
627+
self.assertIsInstance(e.keycode, int)
628+
self.assertNotEqual(e.keycode, 0)
629+
self.assertEqual(e.keysym, 'z')
630+
self.assertEqual(e.keysym_num, ord('z'))
631+
self.assertEqual(e.width, '??')
632+
self.assertEqual(e.height, '??')
633+
self.assertEqual(e.x, -1 - f.winfo_rootx())
634+
self.assertEqual(e.y, -1 - f.winfo_rooty())
635+
self.assertEqual(e.x_root, -1)
636+
self.assertEqual(e.y_root, -1)
637+
self.assertEqual(e.delta, 0)
638+
self.assertEqual(repr(e),
639+
f"<KeyPress event state={e.state:#x} "
640+
f"keysym=z keycode={e.keycode} char='z' x={e.x} y={e.y}>")
641+
642+
def test_event_generate_enter(self):
643+
f = tkinter.Frame(self.root, width=150, height=100)
644+
f.pack()
645+
self.root.wait_visibility() # needed on Windows
646+
self.root.update_idletasks()
647+
648+
events = []
649+
f.bind('<Enter>', events.append)
650+
651+
f.event_generate('<Enter>', x=100, y=50)
652+
self.assertEqual(len(events), 1, events)
653+
e = events[0]
654+
self.assertIs(e.type, tkinter.EventType.Enter)
655+
self.assertIs(e.widget, f)
656+
self.assertIsInstance(e.serial, int)
657+
self.assertEqual(e.time, 0)
658+
self.assertIs(e.send_event, False)
659+
self.assertIs(e.focus, False)
660+
self.assertEqual(e.num, '??')
661+
self.assertEqual(e.state, 0)
662+
self.assertEqual(e.char, '??')
663+
self.assertEqual(e.keycode, '??')
664+
self.assertEqual(e.keysym, '??')
665+
self.assertEqual(e.keysym_num, '??')
666+
self.assertEqual(e.width, '??')
667+
self.assertEqual(e.height, '??')
668+
self.assertEqual(e.x, 100)
669+
self.assertEqual(e.y, 50)
670+
self.assertEqual(e.x_root, 100 + f.winfo_rootx())
671+
self.assertEqual(e.y_root, 50 + f.winfo_rooty())
672+
self.assertEqual(e.delta, 0)
673+
self.assertEqual(repr(e), '<Enter event focus=False x=100 y=50>')
674+
675+
def test_event_generate_button_press(self):
676+
f = tkinter.Frame(self.root, width=150, height=100)
677+
f.pack()
678+
self.root.wait_visibility() # needed on Windows
679+
self.root.update_idletasks()
680+
681+
events = []
682+
f.bind('<ButtonPress>', events.append)
683+
f.focus_force()
684+
685+
f.event_generate('<Button-1>', x=100, y=50)
686+
self.assertEqual(len(events), 1, events)
687+
e = events[0]
688+
self.assertIs(e.type, tkinter.EventType.ButtonPress)
689+
self.assertIs(e.widget, f)
690+
self.assertIsInstance(e.serial, int)
691+
self.assertEqual(e.time, 0)
692+
self.assertIs(e.send_event, False)
693+
self.assertFalse(hasattr(e, 'focus'))
694+
self.assertEqual(e.num, 1)
695+
self.assertEqual(e.state, 0)
696+
self.assertEqual(e.char, '??')
697+
self.assertEqual(e.keycode, '??')
698+
self.assertEqual(e.keysym, '??')
699+
self.assertEqual(e.keysym_num, '??')
700+
self.assertEqual(e.width, '??')
701+
self.assertEqual(e.height, '??')
702+
self.assertEqual(e.x, 100)
703+
self.assertEqual(e.y, 50)
704+
self.assertEqual(e.x_root, f.winfo_rootx() + 100)
705+
self.assertEqual(e.y_root, f.winfo_rooty() + 50)
706+
self.assertEqual(e.delta, 0)
707+
self.assertEqual(repr(e), '<ButtonPress event num=1 x=100 y=50>')
708+
709+
def test_event_generate_motion(self):
710+
f = tkinter.Frame(self.root, width=150, height=100)
711+
f.pack()
712+
self.root.wait_visibility() # needed on Windows
713+
self.root.update_idletasks()
714+
715+
events = []
716+
f.bind('<Motion>', events.append)
717+
f.focus_force()
718+
719+
f.event_generate('<B1-Motion>', x=100, y=50)
720+
self.assertEqual(len(events), 1, events)
721+
e = events[0]
722+
self.assertIs(e.type, tkinter.EventType.Motion)
723+
self.assertIs(e.widget, f)
724+
self.assertIsInstance(e.serial, int)
725+
self.assertEqual(e.time, 0)
726+
self.assertIs(e.send_event, False)
727+
self.assertFalse(hasattr(e, 'focus'))
728+
self.assertEqual(e.num, '??')
729+
self.assertEqual(e.state, 0x100)
730+
self.assertEqual(e.char, '??')
731+
self.assertEqual(e.keycode, '??')
732+
self.assertEqual(e.keysym, '??')
733+
self.assertEqual(e.keysym_num, '??')
734+
self.assertEqual(e.width, '??')
735+
self.assertEqual(e.height, '??')
736+
self.assertEqual(e.x, 100)
737+
self.assertEqual(e.y, 50)
738+
self.assertEqual(e.x_root, f.winfo_rootx() + 100)
739+
self.assertEqual(e.y_root, f.winfo_rooty() + 50)
740+
self.assertEqual(e.delta, 0)
741+
self.assertEqual(repr(e), '<Motion event state=Button1 x=100 y=50>')
742+
743+
def test_event_generate_mouse_wheel(self):
744+
f = tkinter.Frame(self.root, width=150, height=100)
745+
f.pack()
746+
self.root.wait_visibility() # needed on Windows
747+
self.root.update_idletasks()
748+
749+
events = []
750+
f.bind('<MouseWheel>', events.append)
751+
f.focus_force()
752+
753+
f.event_generate('<MouseWheel>', x=100, y=50, delta=-5)
754+
self.assertEqual(len(events), 1, events)
755+
e = events[0]
756+
self.assertIs(e.type, tkinter.EventType.MouseWheel)
757+
self.assertIs(e.widget, f)
758+
self.assertIsInstance(e.serial, int)
759+
self.assertIs(e.send_event, False)
760+
self.assertFalse(hasattr(e, 'focus'))
761+
self.assertEqual(e.time, 0)
762+
self.assertEqual(e.num, '??')
763+
self.assertEqual(e.state, 0)
764+
self.assertEqual(e.char, '??')
765+
self.assertEqual(e.keycode, '??')
766+
self.assertEqual(e.keysym, '??')
767+
self.assertEqual(e.keysym_num, '??')
768+
self.assertEqual(e.width, '??')
769+
self.assertEqual(e.height, '??')
770+
self.assertEqual(e.x, 100)
771+
self.assertEqual(e.y, 50)
772+
self.assertEqual(e.x_root, f.winfo_rootx() + 100)
773+
self.assertEqual(e.y_root, f.winfo_rooty() + 50)
774+
self.assertEqual(e.delta, -5)
775+
self.assertEqual(repr(e), '<MouseWheel event delta=-5 x=100 y=50>')
776+
777+
def test_generate_event_virtual_event(self):
778+
f = tkinter.Frame(self.root, width=150, height=100)
779+
f.pack()
780+
self.root.wait_visibility() # needed on Windows
781+
self.root.update_idletasks()
782+
783+
events = []
784+
f.bind('<<Spam>>', events.append)
785+
f.focus_force()
786+
787+
f.event_generate('<<Spam>>', x=50)
788+
self.assertEqual(len(events), 1, events)
789+
e = events[0]
790+
self.assertIs(e.type, tkinter.EventType.VirtualEvent)
791+
self.assertIs(e.widget, f)
792+
self.assertIsInstance(e.serial, int)
793+
self.assertEqual(e.time, 0)
794+
self.assertIs(e.send_event, False)
795+
self.assertFalse(hasattr(e, 'focus'))
796+
self.assertEqual(e.num, '??')
797+
self.assertEqual(e.state, 0)
798+
self.assertEqual(e.char, '??')
799+
self.assertEqual(e.keycode, '??')
800+
self.assertEqual(e.keysym, '??')
801+
self.assertEqual(e.keysym_num, '??')
802+
self.assertEqual(e.width, '??')
803+
self.assertEqual(e.height, '??')
804+
self.assertEqual(e.x, 50)
805+
self.assertEqual(e.y, 0)
806+
self.assertEqual(e.x_root, f.winfo_rootx() + 50)
807+
self.assertEqual(e.y_root, -1)
808+
self.assertEqual(e.delta, 0)
809+
self.assertEqual(repr(e),
810+
f"<VirtualEvent event x=50 y=0>")
811+
812+
535813
class BindTest(AbstractTkTest, unittest.TestCase):
536814

537815
def setUp(self):

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.