mirror of
https://github.com/python/cpython
synced 2026-09-29 12:10:30 +03:00
bpo-33987: IDLE - use ttk Frame for ttk widgets (GH-11395)
This commit is contained in:
parent
e9a044ec16
commit
aff0adabf3
13 changed files with 38 additions and 28 deletions
|
|
@ -4,7 +4,7 @@ An auto-completion window for IDLE, used by the autocomplete extension
|
|||
import platform
|
||||
|
||||
from tkinter import *
|
||||
from tkinter.ttk import Scrollbar
|
||||
from tkinter.ttk import Frame, Scrollbar
|
||||
|
||||
from idlelib.autocomplete import COMPLETE_FILES, COMPLETE_ATTRIBUTES
|
||||
from idlelib.multicall import MC_SHIFT
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
Dialog for building Tkinter accelerator key bindings
|
||||
"""
|
||||
from tkinter import Toplevel, Listbox, Text, StringVar, TclError
|
||||
from tkinter.ttk import Button, Checkbutton, Entry, Frame, Label, Scrollbar
|
||||
from tkinter.ttk import Frame, Button, Checkbutton, Entry, Label, Scrollbar
|
||||
from tkinter import messagebox
|
||||
import string
|
||||
import sys
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ from tkinter import (Toplevel, Listbox, Text, Scale, Canvas,
|
|||
TOP, BOTTOM, RIGHT, LEFT, SOLID, GROOVE,
|
||||
NONE, BOTH, X, Y, W, E, EW, NS, NSEW, NW,
|
||||
HORIZONTAL, VERTICAL, ANCHOR, ACTIVE, END)
|
||||
from tkinter.ttk import (Button, Checkbutton, Entry, Frame, Label, LabelFrame,
|
||||
from tkinter.ttk import (Frame, LabelFrame, Button, Checkbutton, Entry, Label,
|
||||
OptionMenu, Notebook, Radiobutton, Scrollbar, Style)
|
||||
import tkinter.colorchooser as tkColorChooser
|
||||
import tkinter.font as tkFont
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import bdb
|
|||
import os
|
||||
|
||||
from tkinter import *
|
||||
from tkinter.ttk import Scrollbar
|
||||
from tkinter.ttk import Frame, Scrollbar
|
||||
|
||||
from idlelib import macosx
|
||||
from idlelib.scrolledlist import ScrolledList
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import os
|
|||
import sys
|
||||
|
||||
from tkinter import StringVar, BooleanVar
|
||||
from tkinter.ttk import Checkbutton
|
||||
from tkinter.ttk import Checkbutton # Frame imported in ...Base
|
||||
|
||||
from idlelib.searchbase import SearchDialogBase
|
||||
from idlelib import searchengine
|
||||
|
|
@ -173,15 +173,18 @@ class GrepDialog(SearchDialogBase):
|
|||
|
||||
def _grep_dialog(parent): # htest #
|
||||
from tkinter import Toplevel, Text, SEL, END
|
||||
from tkinter.ttk import Button
|
||||
from tkinter.ttk import Frame, Button
|
||||
from idlelib.pyshell import PyShellFileList
|
||||
|
||||
top = Toplevel(parent)
|
||||
top.title("Test GrepDialog")
|
||||
x, y = map(int, parent.geometry().split('+')[1:])
|
||||
top.geometry(f"+{x}+{y + 175}")
|
||||
|
||||
flist = PyShellFileList(top)
|
||||
text = Text(top, height=5)
|
||||
frame = Frame(top)
|
||||
frame.pack()
|
||||
text = Text(frame, height=5)
|
||||
text.pack()
|
||||
|
||||
def show_grep_dialog():
|
||||
|
|
@ -189,7 +192,7 @@ def _grep_dialog(parent): # htest #
|
|||
grep(text, flist=flist)
|
||||
text.tag_remove(SEL, "1.0", END)
|
||||
|
||||
button = Button(top, text="Show GrepDialog", command=show_grep_dialog)
|
||||
button = Button(frame, text="Show GrepDialog", command=show_grep_dialog)
|
||||
button.pack()
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@
|
|||
|
||||
import unittest
|
||||
from test.support import requires
|
||||
from tkinter import Tk, Frame ##, BooleanVar, StringVar
|
||||
from tkinter import Tk
|
||||
from tkinter.ttk import Frame
|
||||
from idlelib import searchengine as se
|
||||
from idlelib import searchbase as sdb
|
||||
from idlelib.idle_test.mock_idle import Func
|
||||
|
|
@ -97,11 +98,12 @@ class SearchDialogBaseTest(unittest.TestCase):
|
|||
self.dialog.top = self.root
|
||||
frame, label = self.dialog.make_frame()
|
||||
self.assertEqual(label, '')
|
||||
self.assertIsInstance(frame, Frame)
|
||||
self.assertEqual(str(type(frame)), "<class 'tkinter.ttk.Frame'>")
|
||||
# self.assertIsInstance(frame, Frame) fails when test is run by
|
||||
# test_idle not run from IDLE editor. See issue 33987 PR.
|
||||
|
||||
frame, label = self.dialog.make_frame('testlabel')
|
||||
self.assertEqual(label['text'], 'testlabel')
|
||||
self.assertIsInstance(frame, Frame)
|
||||
|
||||
def btn_test_setup(self, meth):
|
||||
self.dialog.top = self.root
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
"""
|
||||
Dialogs that query users and verify the answer before accepting.
|
||||
Use ttk widgets, limiting use to tcl/tk 8.5+, as in IDLE 3.6+.
|
||||
|
||||
Query is the generic base class for a popup dialog.
|
||||
The user must either enter a valid answer or close the dialog.
|
||||
|
|
|
|||
|
|
@ -205,12 +205,12 @@ class ReplaceDialog(SearchDialogBase):
|
|||
|
||||
def _replace_dialog(parent): # htest #
|
||||
from tkinter import Toplevel, Text, END, SEL
|
||||
from tkinter.ttk import Button
|
||||
from tkinter.ttk import Frame, Button
|
||||
|
||||
box = Toplevel(parent)
|
||||
box.title("Test ReplaceDialog")
|
||||
top = Toplevel(parent)
|
||||
top.title("Test ReplaceDialog")
|
||||
x, y = map(int, parent.geometry().split('+')[1:])
|
||||
box.geometry("+%d+%d" % (x, y + 175))
|
||||
top.geometry("+%d+%d" % (x, y + 175))
|
||||
|
||||
# mock undo delegator methods
|
||||
def undo_block_start():
|
||||
|
|
@ -219,7 +219,9 @@ def _replace_dialog(parent): # htest #
|
|||
def undo_block_stop():
|
||||
pass
|
||||
|
||||
text = Text(box, inactiveselectbackground='gray')
|
||||
frame = Frame(top)
|
||||
frame.pack()
|
||||
text = Text(frame, inactiveselectbackground='gray')
|
||||
text.undo_block_start = undo_block_start
|
||||
text.undo_block_stop = undo_block_stop
|
||||
text.pack()
|
||||
|
|
@ -231,7 +233,7 @@ def _replace_dialog(parent): # htest #
|
|||
replace(text)
|
||||
text.tag_remove(SEL, "1.0", END)
|
||||
|
||||
button = Button(box, text="Replace", command=show_replace)
|
||||
button = Button(frame, text="Replace", command=show_replace)
|
||||
button.pack()
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
from tkinter import *
|
||||
from tkinter.ttk import Scrollbar
|
||||
from tkinter.ttk import Frame, Scrollbar
|
||||
|
||||
from idlelib import macosx
|
||||
|
||||
|
|
|
|||
|
|
@ -75,13 +75,16 @@ class SearchDialog(SearchDialogBase):
|
|||
def _search_dialog(parent): # htest #
|
||||
"Display search test box."
|
||||
from tkinter import Toplevel, Text
|
||||
from tkinter.ttk import Button
|
||||
from tkinter.ttk import Frame, Button
|
||||
|
||||
box = Toplevel(parent)
|
||||
box.title("Test SearchDialog")
|
||||
top = Toplevel(parent)
|
||||
top.title("Test SearchDialog")
|
||||
x, y = map(int, parent.geometry().split('+')[1:])
|
||||
box.geometry("+%d+%d" % (x, y + 175))
|
||||
text = Text(box, inactiveselectbackground='gray')
|
||||
top.geometry("+%d+%d" % (x, y + 175))
|
||||
|
||||
frame = Frame(top)
|
||||
frame.pack()
|
||||
text = Text(frame, inactiveselectbackground='gray')
|
||||
text.pack()
|
||||
text.insert("insert","This is a sample string.\n"*5)
|
||||
|
||||
|
|
@ -90,7 +93,7 @@ def _search_dialog(parent): # htest #
|
|||
_setup(text).open(text)
|
||||
text.tag_remove('sel', '1.0', 'end')
|
||||
|
||||
button = Button(box, text="Search (selection ignored)", command=show_find)
|
||||
button = Button(frame, text="Search (selection ignored)", command=show_find)
|
||||
button.pack()
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
'''Define SearchDialogBase used by Search, Replace, and Grep dialogs.'''
|
||||
|
||||
from tkinter import Toplevel, Frame
|
||||
from tkinter.ttk import Entry, Label, Button, Checkbutton, Radiobutton
|
||||
from tkinter import Toplevel
|
||||
from tkinter.ttk import Frame, Entry, Label, Button, Checkbutton, Radiobutton
|
||||
|
||||
|
||||
class SearchDialogBase:
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
import os
|
||||
|
||||
from tkinter import *
|
||||
from tkinter.ttk import Scrollbar
|
||||
from tkinter.ttk import Frame, Scrollbar
|
||||
|
||||
from idlelib.config import idleConf
|
||||
from idlelib import zoomheight
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
Use ttk Frame for ttk widgets.
|
||||
Loading…
Add table
Add a link
Reference in a new issue