From 3f4f42e8ccff611f800c0ddbcdc3268aca2601a7 Mon Sep 17 00:00:00 2001 From: Mark Roseman Date: Sat, 24 Oct 2020 08:48:22 -0700 Subject: [PATCH 1/6] bpo-33987: ttk frame inside search dialog toplevel --- Lib/idlelib/idle_test/test_searchbase.py | 12 ++++++------ Lib/idlelib/searchbase.py | 17 ++++++++++------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/Lib/idlelib/idle_test/test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py index aee0c4c69929a6..8ed0a948789792 100644 --- a/Lib/idlelib/idle_test/test_searchbase.py +++ b/Lib/idlelib/idle_test/test_searchbase.py @@ -76,7 +76,7 @@ def test_create_widgets(self): def test_make_entry(self): equal = self.assertEqual self.dialog.row = 0 - self.dialog.top = self.root + self.dialog.top = self.dialog.frame = self.root entry, label = self.dialog.make_entry("Test:", 'hello') equal(label['text'], 'Test:') @@ -89,7 +89,7 @@ def test_make_entry(self): equal(self.dialog.row, 1) def test_create_entries(self): - self.dialog.top = self.root + self.dialog.top = self.dialog.frame = self.root self.dialog.row = 0 self.engine.setpat('hello') self.dialog.create_entries() @@ -97,7 +97,7 @@ def test_create_entries(self): def test_make_frame(self): self.dialog.row = 0 - self.dialog.top = self.root + self.dialog.top = self.dialog.frame = self.root frame, label = self.dialog.make_frame() self.assertEqual(label, '') self.assertEqual(str(type(frame)), "") @@ -108,7 +108,7 @@ def test_make_frame(self): self.assertEqual(label['text'], 'testlabel') def btn_test_setup(self, meth): - self.dialog.top = self.root + self.dialog.top = self.dialog.frame = self.root self.dialog.row = 0 return meth() @@ -140,13 +140,13 @@ def test_create_other_buttons(self): self.assertEqual(var.get(), state) def test_make_button(self): - self.dialog.top = self.root + self.dialog.top = self.dialog.frame = self.root self.dialog.buttonframe = Frame(self.dialog.top) btn = self.dialog.make_button('Test', self.dialog.close) self.assertEqual(btn['text'], 'Test') def test_create_command_buttons(self): - self.dialog.top = self.root + self.dialog.top = self.dialog.frame = self.root self.dialog.create_command_buttons() # Look for close button command in buttonframe closebuttoncommand = '' diff --git a/Lib/idlelib/searchbase.py b/Lib/idlelib/searchbase.py index 6fba0b8e583f2b..5c41f194063971 100644 --- a/Lib/idlelib/searchbase.py +++ b/Lib/idlelib/searchbase.py @@ -33,6 +33,7 @@ def __init__(self, root, engine): '''Initialize root, engine, and top attributes. top (level widget): set in create_widgets() called from open(). + frame: container for all widgets in dialog. text (Text searched): set in open(), only used in subclasses(). ent (ry): created in make_entry() called from create_entry(). row (of grid): 0 in create_widgets(), +1 in make_entry/frame(). @@ -83,10 +84,12 @@ def create_widgets(self): top.wm_title(self.title) top.wm_iconname(self.icon) self.top = top + self.frame = Frame(top, padding="5px") + self.frame.grid(sticky="nwes") self.row = 0 - self.top.grid_columnconfigure(0, pad=2, weight=0) - self.top.grid_columnconfigure(1, pad=2, minsize=100, weight=100) + self.frame.grid_columnconfigure(0, pad=2, weight=0) + self.frame.grid_columnconfigure(1, pad=2, minsize=100, weight=100) self.create_entries() # row 0 (and maybe 1), cols 0, 1 self.create_option_buttons() # next row, cols 0, 1 @@ -99,9 +102,9 @@ def make_entry(self, label_text, var): entry - gridded labeled Entry for text entry. label - Label widget, returned for testing. ''' - label = Label(self.top, text=label_text) + label = Label(self.frame, text=label_text) label.grid(row=self.row, column=0, sticky="nw") - entry = Entry(self.top, textvariable=var, exportselection=0) + entry = Entry(self.frame, textvariable=var, exportselection=0) entry.grid(row=self.row, column=1, sticky="nwe") self.row = self.row + 1 return entry, label @@ -117,11 +120,11 @@ def make_frame(self,labeltext=None): label - Label widget, returned for testing. ''' if labeltext: - label = Label(self.top, text=labeltext) + label = Label(self.frame, text=labeltext) label.grid(row=self.row, column=0, sticky="nw") else: label = '' - frame = Frame(self.top) + frame = Frame(self.frame) frame.grid(row=self.row, column=1, columnspan=1, sticky="nwe") self.row = self.row + 1 return frame, label @@ -171,7 +174,7 @@ def make_button(self, label, command, isdef=0): def create_command_buttons(self): "Place buttons in vertical command frame gridded on right." - f = self.buttonframe = Frame(self.top) + f = self.buttonframe = Frame(self.frame) f.grid(row=0,column=2,padx=2,pady=2,ipadx=2,ipady=2) b = self.make_button("Close", self.close) From f63730faa06c097e36bc8be34bdfdc3362c0cb33 Mon Sep 17 00:00:00 2001 From: Mark Roseman Date: Sat, 24 Oct 2020 09:31:40 -0700 Subject: [PATCH 2/6] ensure frame resizes with window --- Lib/idlelib/searchbase.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Lib/idlelib/searchbase.py b/Lib/idlelib/searchbase.py index 5c41f194063971..fbef87aa2d3d04 100644 --- a/Lib/idlelib/searchbase.py +++ b/Lib/idlelib/searchbase.py @@ -86,6 +86,8 @@ def create_widgets(self): self.top = top self.frame = Frame(top, padding="5px") self.frame.grid(sticky="nwes") + top.grid_columnconfigure(0, weight=100) + top.grid_rowconfigure(0, weight=100) self.row = 0 self.frame.grid_columnconfigure(0, pad=2, weight=0) From d9de3f79a48ad712814b5ad5a1f22cc0852d97e0 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sat, 24 Oct 2020 21:25:32 -0400 Subject: [PATCH 3/6] Fix tests to keep widgets in master frame. --- Lib/idlelib/idle_test/test_searchbase.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Lib/idlelib/idle_test/test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py index 8ed0a948789792..8c9c410ebaf47c 100644 --- a/Lib/idlelib/idle_test/test_searchbase.py +++ b/Lib/idlelib/idle_test/test_searchbase.py @@ -76,7 +76,7 @@ def test_create_widgets(self): def test_make_entry(self): equal = self.assertEqual self.dialog.row = 0 - self.dialog.top = self.dialog.frame = self.root + self.dialog.frame = Frame(self.root) entry, label = self.dialog.make_entry("Test:", 'hello') equal(label['text'], 'Test:') @@ -89,7 +89,7 @@ def test_make_entry(self): equal(self.dialog.row, 1) def test_create_entries(self): - self.dialog.top = self.dialog.frame = self.root + self.dialog.frame = Frame(self.root) self.dialog.row = 0 self.engine.setpat('hello') self.dialog.create_entries() @@ -97,7 +97,7 @@ def test_create_entries(self): def test_make_frame(self): self.dialog.row = 0 - self.dialog.top = self.dialog.frame = self.root + self.dialog.frame = Frame(self.root) frame, label = self.dialog.make_frame() self.assertEqual(label, '') self.assertEqual(str(type(frame)), "") @@ -108,7 +108,7 @@ def test_make_frame(self): self.assertEqual(label['text'], 'testlabel') def btn_test_setup(self, meth): - self.dialog.top = self.dialog.frame = self.root + self.dialog.frame = Frame(self.root) self.dialog.row = 0 return meth() @@ -140,13 +140,13 @@ def test_create_other_buttons(self): self.assertEqual(var.get(), state) def test_make_button(self): - self.dialog.top = self.dialog.frame = self.root - self.dialog.buttonframe = Frame(self.dialog.top) + self.dialog.frame = Frame(self.root) + self.dialog.buttonframe = Frame(self.dialog.frame) btn = self.dialog.make_button('Test', self.dialog.close) self.assertEqual(btn['text'], 'Test') def test_create_command_buttons(self): - self.dialog.top = self.dialog.frame = self.root + self.dialog.frame = Frame(self.root) self.dialog.create_command_buttons() # Look for close button command in buttonframe closebuttoncommand = '' From 8b72e71682c9ed882d8b60045699c051e3652272 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sat, 24 Oct 2020 21:35:07 -0400 Subject: [PATCH 4/6] News --- Lib/idlelib/NEWS.txt | 3 +++ Misc/NEWS.d/next/IDLE/2020-10-24-21-27-37.bpo-33987.fIh9JL.rst | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 Misc/NEWS.d/next/IDLE/2020-10-24-21-27-37.bpo-33987.fIh9JL.rst diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index 754034200a1f62..b541db7b92b259 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -3,6 +3,9 @@ Released on 2021-10-04? ====================================== +bpo-33987: Finish conversion to ttk widgets, mainly for editor, +settings, and searches. Some patches by Mark Roseman. + bpo-41775: Make 'IDLE Shell' the shell title. bpo-35764: Rewrite the Calltips doc section. diff --git a/Misc/NEWS.d/next/IDLE/2020-10-24-21-27-37.bpo-33987.fIh9JL.rst b/Misc/NEWS.d/next/IDLE/2020-10-24-21-27-37.bpo-33987.fIh9JL.rst new file mode 100644 index 00000000000000..96c7019f7d3846 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2020-10-24-21-27-37.bpo-33987.fIh9JL.rst @@ -0,0 +1,3 @@ +Finish conversion to ttk widgets, mainly for editor, settings, +and searches. Some patches by Mark Roseman. + From 683e7ca04413e4959ed754e1a7e05b5cf7511d2a Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sat, 24 Oct 2020 21:51:54 -0400 Subject: [PATCH 5/6] Update NEWS.txt --- Lib/idlelib/NEWS.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index b541db7b92b259..3ece623b3aa187 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -3,7 +3,7 @@ Released on 2021-10-04? ====================================== -bpo-33987: Finish conversion to ttk widgets, mainly for editor, +bpo-33987: Mostly finish using ttk widgets, mainly for editor, settings, and searches. Some patches by Mark Roseman. bpo-41775: Make 'IDLE Shell' the shell title. From d2d0bf875725379019e722f85108a95cbcc49117 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Sat, 24 Oct 2020 21:52:22 -0400 Subject: [PATCH 6/6] Update 2020-10-24-21-27-37.bpo-33987.fIh9JL.rst --- Misc/NEWS.d/next/IDLE/2020-10-24-21-27-37.bpo-33987.fIh9JL.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/IDLE/2020-10-24-21-27-37.bpo-33987.fIh9JL.rst b/Misc/NEWS.d/next/IDLE/2020-10-24-21-27-37.bpo-33987.fIh9JL.rst index 96c7019f7d3846..1e67edc03c658d 100644 --- a/Misc/NEWS.d/next/IDLE/2020-10-24-21-27-37.bpo-33987.fIh9JL.rst +++ b/Misc/NEWS.d/next/IDLE/2020-10-24-21-27-37.bpo-33987.fIh9JL.rst @@ -1,3 +1,3 @@ -Finish conversion to ttk widgets, mainly for editor, settings, +Mostly finish using ttk widgets, mainly for editor, settings, and searches. Some patches by Mark Roseman.