Skip to content

Commit 3ca876d

Browse files
committed
Modify copy_widget to allow non-visible widgets
1 parent 311294b commit 3ca876d

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

tests/test_utilities.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,17 @@ def test_move_widget_place(self):
7373
self.assertNotIn(label, self.window.place_slaves())
7474
self.assertGeometryInfoEquals(info, label.place_info())
7575

76+
def test_move_widget_none(self):
77+
label = ttk.Label(self.window)
78+
self.assertFalse(label.place_info() is True)
79+
self.assertFalse(label.grid_info() is True)
80+
self.assertRaises(tk.TclError, label.pack_info)
81+
tl = tk.Toplevel(self.window)
82+
label = move_widget(label, tl, preserve_geometry=True)
83+
self.assertFalse(label.place_info() is True)
84+
self.assertFalse(label.grid_info() is True)
85+
self.assertRaises(tk.TclError, label.pack_info)
86+
7687
def test_move_widget_with_binding(self):
7788
label = ttk.Label(self.window)
7889
label.bind('<Enter>', self._dummy_bind)

ttkwidgets/utilities.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@
88
import os
99
from PIL import Image, ImageTk
1010
import re
11+
try:
12+
import Tkinter as tk
13+
except ImportError:
14+
import tkinter as tk
1115

1216

1317
def get_assets_directory():
@@ -52,6 +56,10 @@ def copy_widget(widget, new_parent, level=0):
5256
script = widget.bind(b)
5357
rv.bind(b, script)
5458
if level > 0:
59+
try:
60+
pack_info = widget.pack_info()
61+
except tk.TclError:
62+
pack_info = {}
5563
if widget.grid_info(): # if geometry manager is grid
5664
temp = widget.grid_info()
5765
del temp['in']
@@ -60,10 +68,12 @@ def copy_widget(widget, new_parent, level=0):
6068
temp = widget.place_info()
6169
del temp['in']
6270
rv.place(**temp)
63-
else: # if geometry manager is pack
71+
elif pack_info: # if geometry manager is pack
6472
temp = widget.pack_info()
6573
del temp['in']
6674
rv.pack(**temp)
75+
else: # No geometry manager configured
76+
pass
6777
level += 1
6878

6979
if widget.pack_slaves(): # subwidgets are using the pack() geometry manager

0 commit comments

Comments
 (0)