mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Issue #27939: Fixed bugs in tkinter.ttk.LabeledScale and tkinter.Scale caused
by representing the scale as float value internally in Tk. tkinter.IntVar now works if float value is set to underlying Tk variable.
This commit is contained in:
parent
0438683939
commit
32c0d3ada5
4 changed files with 25 additions and 9 deletions
|
@ -167,15 +167,14 @@ class TestIntVar(TestBase):
|
|||
self.assertEqual(123, v.get())
|
||||
self.root.globalsetvar("name", "345")
|
||||
self.assertEqual(345, v.get())
|
||||
self.root.globalsetvar("name", "876.5")
|
||||
self.assertEqual(876, v.get())
|
||||
|
||||
def test_invalid_value(self):
|
||||
v = IntVar(self.root, name="name")
|
||||
self.root.globalsetvar("name", "value")
|
||||
with self.assertRaises((ValueError, TclError)):
|
||||
v.get()
|
||||
self.root.globalsetvar("name", "345.0")
|
||||
with self.assertRaises((ValueError, TclError)):
|
||||
v.get()
|
||||
|
||||
|
||||
class TestDoubleVar(TestBase):
|
||||
|
|
|
@ -69,14 +69,12 @@ class LabeledScaleTest(AbstractTkTest, unittest.TestCase):
|
|||
|
||||
# variable initialization/passing
|
||||
passed_expected = (('0', 0), (0, 0), (10, 10),
|
||||
(-1, -1), (sys.maxsize + 1, sys.maxsize + 1))
|
||||
(-1, -1), (sys.maxsize + 1, sys.maxsize + 1),
|
||||
(2.5, 2), ('2.5', 2))
|
||||
for pair in passed_expected:
|
||||
x = ttk.LabeledScale(self.root, from_=pair[0])
|
||||
self.assertEqual(x.value, pair[1])
|
||||
x.destroy()
|
||||
x = ttk.LabeledScale(self.root, from_='2.5')
|
||||
self.assertRaises((ValueError, tkinter.TclError), x._variable.get)
|
||||
x.destroy()
|
||||
x = ttk.LabeledScale(self.root, from_=None)
|
||||
self.assertRaises((ValueError, tkinter.TclError), x._variable.get)
|
||||
x.destroy()
|
||||
|
@ -155,8 +153,10 @@ class LabeledScaleTest(AbstractTkTest, unittest.TestCase):
|
|||
# The following update is needed since the test doesn't use mainloop,
|
||||
# at the same time this shouldn't affect test outcome
|
||||
x.update()
|
||||
self.assertEqual(x.value, newval)
|
||||
self.assertEqual(x.label['text'],
|
||||
newval if self.wantobjects else str(newval))
|
||||
self.assertEqual(float(x.scale.get()), newval)
|
||||
self.assertGreater(x.scale.coords()[0], curr_xcoord)
|
||||
self.assertEqual(x.scale.coords()[0],
|
||||
int(x.label.place_info()['x']))
|
||||
|
@ -168,10 +168,19 @@ class LabeledScaleTest(AbstractTkTest, unittest.TestCase):
|
|||
conv = int
|
||||
x.value = conv(x.scale['to']) + 1 # no changes shouldn't happen
|
||||
x.update()
|
||||
self.assertEqual(x.value, newval)
|
||||
self.assertEqual(conv(x.label['text']), newval)
|
||||
self.assertEqual(float(x.scale.get()), newval)
|
||||
self.assertEqual(x.scale.coords()[0],
|
||||
int(x.label.place_info()['x']))
|
||||
|
||||
# non-integer value
|
||||
x.value = newval = newval + 1.5
|
||||
x.update()
|
||||
self.assertEqual(x.value, int(newval))
|
||||
self.assertEqual(conv(x.label['text']), int(newval))
|
||||
self.assertEqual(float(x.scale.get()), newval)
|
||||
|
||||
x.destroy()
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue