Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
2d68f186
Kaydet (Commit)
2d68f186
authored
Mar 09, 2016
tarafından
Serhiy Storchaka
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Sade Fark
Issue #26177: Fixed the keys() method for Canvas and Scrollbar widgets.
üst
b9f3114d
42a4366a
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
183 additions
and
138 deletions
+183
-138
__init__.py
Lib/tkinter/__init__.py
+3
-2
test_geometry_managers.py
Lib/tkinter/test/test_tkinter/test_geometry_managers.py
+6
-0
test_widgets.py
Lib/tkinter/test/test_tkinter/test_widgets.py
+11
-2
test_widgets.py
Lib/tkinter/test/test_ttk/test_widgets.py
+134
-134
widget_tests.py
Lib/tkinter/test/widget_tests.py
+27
-0
NEWS
Misc/NEWS
+2
-0
No files found.
Lib/tkinter/__init__.py
Dosyayı görüntüle @
2d68f186
...
...
@@ -1336,8 +1336,9 @@ class Misc:
self
.
configure
({
key
:
value
})
def
keys
(
self
):
"""Return a list of all resource names of this widget."""
return
[
x
[
0
][
1
:]
for
x
in
self
.
tk
.
splitlist
(
self
.
tk
.
call
(
self
.
_w
,
'configure'
))]
splitlist
=
self
.
tk
.
splitlist
return
[
splitlist
(
x
)[
0
][
1
:]
for
x
in
splitlist
(
self
.
tk
.
call
(
self
.
_w
,
'configure'
))]
def
__str__
(
self
):
"""Return the window path name of this widget."""
return
self
.
_w
...
...
Lib/tkinter/test/test_tkinter/test_geometry_managers.py
Dosyayı görüntüle @
2d68f186
...
...
@@ -12,6 +12,8 @@ requires('gui')
class
PackTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
test_keys
=
None
def
create2
(
self
):
pack
=
tkinter
.
Toplevel
(
self
.
root
,
name
=
'pack'
)
pack
.
wm_geometry
(
'300x200+0+0'
)
...
...
@@ -276,6 +278,8 @@ class PackTest(AbstractWidgetTest, unittest.TestCase):
class
PlaceTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
test_keys
=
None
def
create2
(
self
):
t
=
tkinter
.
Toplevel
(
self
.
root
,
width
=
300
,
height
=
200
,
bd
=
0
)
t
.
wm_geometry
(
'300x200+0+0'
)
...
...
@@ -478,6 +482,8 @@ class PlaceTest(AbstractWidgetTest, unittest.TestCase):
class
GridTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
test_keys
=
None
def
tearDown
(
self
):
cols
,
rows
=
self
.
root
.
grid_size
()
for
i
in
range
(
cols
+
1
):
...
...
Lib/tkinter/test/test_tkinter/test_widgets.py
Dosyayı görüntüle @
2d68f186
...
...
@@ -103,7 +103,7 @@ class FrameTest(AbstractToplevelTest, unittest.TestCase):
'background'
,
'borderwidth'
,
'class'
,
'colormap'
,
'container'
,
'cursor'
,
'height'
,
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'relief'
,
'takefocus'
,
'visual'
,
'width'
,
'
padx'
,
'pady'
,
'
relief'
,
'takefocus'
,
'visual'
,
'width'
,
)
def
create
(
self
,
**
kwargs
):
...
...
@@ -637,7 +637,7 @@ class CanvasTest(AbstractWidgetTest, unittest.TestCase):
'highlightbackground'
,
'highlightcolor'
,
'highlightthickness'
,
'insertbackground'
,
'insertborderwidth'
,
'insertofftime'
,
'insertontime'
,
'insertwidth'
,
'relief'
,
'scrollregion'
,
'
offset'
,
'
relief'
,
'scrollregion'
,
'selectbackground'
,
'selectborderwidth'
,
'selectforeground'
,
'state'
,
'takefocus'
,
'xscrollcommand'
,
'xscrollincrement'
,
...
...
@@ -659,6 +659,15 @@ class CanvasTest(AbstractWidgetTest, unittest.TestCase):
widget
=
self
.
create
()
self
.
checkBooleanParam
(
widget
,
'confine'
)
def
test_offset
(
self
):
widget
=
self
.
create
()
self
.
assertEqual
(
widget
[
'offset'
],
'0,0'
)
self
.
checkParams
(
widget
,
'offset'
,
'n'
,
'ne'
,
'e'
,
'se'
,
's'
,
'sw'
,
'w'
,
'nw'
,
'center'
)
self
.
checkParam
(
widget
,
'offset'
,
'10,20'
)
self
.
checkParam
(
widget
,
'offset'
,
'#5,6'
)
self
.
checkInvalidParam
(
widget
,
'offset'
,
'spam'
)
def
test_scrollregion
(
self
):
widget
=
self
.
create
()
self
.
checkParam
(
widget
,
'scrollregion'
,
'0 0 200 150'
)
...
...
Lib/tkinter/test/test_ttk/test_widgets.py
Dosyayı görüntüle @
2d68f186
...
...
@@ -187,7 +187,7 @@ class AbstractLabelTest(AbstractWidgetTest):
@add_standard_options
(
StandardTtkOptionsTests
)
class
LabelTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'anchor'
,
'background'
,
'anchor'
,
'background'
,
'borderwidth'
,
'class'
,
'compound'
,
'cursor'
,
'font'
,
'foreground'
,
'image'
,
'justify'
,
'padding'
,
'relief'
,
'state'
,
'style'
,
'takefocus'
,
'text'
,
'textvariable'
,
...
...
@@ -208,7 +208,8 @@ class LabelTest(AbstractLabelTest, unittest.TestCase):
class
ButtonTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'command'
,
'compound'
,
'cursor'
,
'default'
,
'image'
,
'state'
,
'style'
,
'takefocus'
,
'text'
,
'textvariable'
,
'image'
,
'padding'
,
'state'
,
'style'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'width'
,
)
...
...
@@ -232,7 +233,7 @@ class CheckbuttonTest(AbstractLabelTest, unittest.TestCase):
'class'
,
'command'
,
'compound'
,
'cursor'
,
'image'
,
'offvalue'
,
'onvalue'
,
'state'
,
'style'
,
'
padding'
,
'
state'
,
'style'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'variable'
,
'width'
,
)
...
...
@@ -275,138 +276,11 @@ class CheckbuttonTest(AbstractLabelTest, unittest.TestCase):
cbtn
.
tk
.
globalgetvar
(
cbtn
[
'variable'
]))
@add_standard_options
(
IntegerSizeTests
,
StandardTtkOptionsTests
)
class
ComboboxTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'cursor'
,
'exportselection'
,
'height'
,
'justify'
,
'postcommand'
,
'state'
,
'style'
,
'takefocus'
,
'textvariable'
,
'values'
,
'width'
,
)
def
setUp
(
self
):
super
()
.
setUp
()
self
.
combo
=
self
.
create
()
def
create
(
self
,
**
kwargs
):
return
ttk
.
Combobox
(
self
.
root
,
**
kwargs
)
def
test_height
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'height'
,
100
,
101.2
,
102.6
,
-
100
,
0
,
'1i'
)
def
test_state
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'state'
,
'active'
,
'disabled'
,
'normal'
)
def
_show_drop_down_listbox
(
self
):
width
=
self
.
combo
.
winfo_width
()
self
.
combo
.
event_generate
(
'<ButtonPress-1>'
,
x
=
width
-
5
,
y
=
5
)
self
.
combo
.
event_generate
(
'<ButtonRelease-1>'
,
x
=
width
-
5
,
y
=
5
)
self
.
combo
.
update_idletasks
()
def
test_virtual_event
(
self
):
success
=
[]
self
.
combo
[
'values'
]
=
[
1
]
self
.
combo
.
bind
(
'<<ComboboxSelected>>'
,
lambda
evt
:
success
.
append
(
True
))
self
.
combo
.
pack
()
self
.
combo
.
wait_visibility
()
height
=
self
.
combo
.
winfo_height
()
self
.
_show_drop_down_listbox
()
self
.
combo
.
update
()
self
.
combo
.
event_generate
(
'<Return>'
)
self
.
combo
.
update
()
self
.
assertTrue
(
success
)
def
test_postcommand
(
self
):
success
=
[]
self
.
combo
[
'postcommand'
]
=
lambda
:
success
.
append
(
True
)
self
.
combo
.
pack
()
self
.
combo
.
wait_visibility
()
self
.
_show_drop_down_listbox
()
self
.
assertTrue
(
success
)
# testing postcommand removal
self
.
combo
[
'postcommand'
]
=
''
self
.
_show_drop_down_listbox
()
self
.
assertEqual
(
len
(
success
),
1
)
def
test_values
(
self
):
def
check_get_current
(
getval
,
currval
):
self
.
assertEqual
(
self
.
combo
.
get
(),
getval
)
self
.
assertEqual
(
self
.
combo
.
current
(),
currval
)
self
.
assertEqual
(
self
.
combo
[
'values'
],
()
if
tcl_version
<
(
8
,
5
)
else
''
)
check_get_current
(
''
,
-
1
)
self
.
checkParam
(
self
.
combo
,
'values'
,
'mon tue wed thur'
,
expected
=
(
'mon'
,
'tue'
,
'wed'
,
'thur'
))
self
.
checkParam
(
self
.
combo
,
'values'
,
(
'mon'
,
'tue'
,
'wed'
,
'thur'
))
self
.
checkParam
(
self
.
combo
,
'values'
,
(
42
,
3.14
,
''
,
'any string'
))
self
.
checkParam
(
self
.
combo
,
'values'
,
''
,
expected
=
''
if
get_tk_patchlevel
()
<
(
8
,
5
,
10
)
else
())
self
.
combo
[
'values'
]
=
[
'a'
,
1
,
'c'
]
self
.
combo
.
set
(
'c'
)
check_get_current
(
'c'
,
2
)
self
.
combo
.
current
(
0
)
check_get_current
(
'a'
,
0
)
self
.
combo
.
set
(
'd'
)
check_get_current
(
'd'
,
-
1
)
# testing values with empty string
self
.
combo
.
set
(
''
)
self
.
combo
[
'values'
]
=
(
1
,
2
,
''
,
3
)
check_get_current
(
''
,
2
)
# testing values with empty string set through configure
self
.
combo
.
configure
(
values
=
[
1
,
''
,
2
])
self
.
assertEqual
(
self
.
combo
[
'values'
],
(
'1'
,
''
,
'2'
)
if
self
.
wantobjects
else
'1 {} 2'
)
# testing values with spaces
self
.
combo
[
'values'
]
=
[
'a b'
,
'a
\t
b'
,
'a
\n
b'
]
self
.
assertEqual
(
self
.
combo
[
'values'
],
(
'a b'
,
'a
\t
b'
,
'a
\n
b'
)
if
self
.
wantobjects
else
'{a b} {a
\t
b} {a
\n
b}'
)
# testing values with special characters
self
.
combo
[
'values'
]
=
[
r'a\tb'
,
'"a"'
,
'} {'
]
self
.
assertEqual
(
self
.
combo
[
'values'
],
(
r'a\tb'
,
'"a"'
,
'} {'
)
if
self
.
wantobjects
else
r'a\\tb {"a"} \}\ \{'
)
# out of range
self
.
assertRaises
(
tkinter
.
TclError
,
self
.
combo
.
current
,
len
(
self
.
combo
[
'values'
]))
# it expects an integer (or something that can be converted to int)
self
.
assertRaises
(
tkinter
.
TclError
,
self
.
combo
.
current
,
''
)
# testing creating combobox with empty string in values
combo2
=
ttk
.
Combobox
(
self
.
root
,
values
=
[
1
,
2
,
''
])
self
.
assertEqual
(
combo2
[
'values'
],
(
'1'
,
'2'
,
''
)
if
self
.
wantobjects
else
'1 2 {}'
)
combo2
.
destroy
()
@add_standard_options
(
IntegerSizeTests
,
StandardTtkOptionsTests
)
class
EntryTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'background'
,
'class'
,
'cursor'
,
'exportselection'
,
'font'
,
'exportselection'
,
'font'
,
'foreground'
,
'invalidcommand'
,
'justify'
,
'show'
,
'state'
,
'style'
,
'takefocus'
,
'textvariable'
,
'validate'
,
'validatecommand'
,
'width'
,
'xscrollcommand'
,
...
...
@@ -534,6 +408,132 @@ class EntryTest(AbstractWidgetTest, unittest.TestCase):
self
.
assertEqual
(
self
.
entry
.
state
(),
())
@add_standard_options
(
IntegerSizeTests
,
StandardTtkOptionsTests
)
class
ComboboxTest
(
EntryTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'background'
,
'class'
,
'cursor'
,
'exportselection'
,
'font'
,
'foreground'
,
'height'
,
'invalidcommand'
,
'justify'
,
'postcommand'
,
'show'
,
'state'
,
'style'
,
'takefocus'
,
'textvariable'
,
'validate'
,
'validatecommand'
,
'values'
,
'width'
,
'xscrollcommand'
,
)
def
setUp
(
self
):
super
()
.
setUp
()
self
.
combo
=
self
.
create
()
def
create
(
self
,
**
kwargs
):
return
ttk
.
Combobox
(
self
.
root
,
**
kwargs
)
def
test_height
(
self
):
widget
=
self
.
create
()
self
.
checkParams
(
widget
,
'height'
,
100
,
101.2
,
102.6
,
-
100
,
0
,
'1i'
)
def
_show_drop_down_listbox
(
self
):
width
=
self
.
combo
.
winfo_width
()
self
.
combo
.
event_generate
(
'<ButtonPress-1>'
,
x
=
width
-
5
,
y
=
5
)
self
.
combo
.
event_generate
(
'<ButtonRelease-1>'
,
x
=
width
-
5
,
y
=
5
)
self
.
combo
.
update_idletasks
()
def
test_virtual_event
(
self
):
success
=
[]
self
.
combo
[
'values'
]
=
[
1
]
self
.
combo
.
bind
(
'<<ComboboxSelected>>'
,
lambda
evt
:
success
.
append
(
True
))
self
.
combo
.
pack
()
self
.
combo
.
wait_visibility
()
height
=
self
.
combo
.
winfo_height
()
self
.
_show_drop_down_listbox
()
self
.
combo
.
update
()
self
.
combo
.
event_generate
(
'<Return>'
)
self
.
combo
.
update
()
self
.
assertTrue
(
success
)
def
test_postcommand
(
self
):
success
=
[]
self
.
combo
[
'postcommand'
]
=
lambda
:
success
.
append
(
True
)
self
.
combo
.
pack
()
self
.
combo
.
wait_visibility
()
self
.
_show_drop_down_listbox
()
self
.
assertTrue
(
success
)
# testing postcommand removal
self
.
combo
[
'postcommand'
]
=
''
self
.
_show_drop_down_listbox
()
self
.
assertEqual
(
len
(
success
),
1
)
def
test_values
(
self
):
def
check_get_current
(
getval
,
currval
):
self
.
assertEqual
(
self
.
combo
.
get
(),
getval
)
self
.
assertEqual
(
self
.
combo
.
current
(),
currval
)
self
.
assertEqual
(
self
.
combo
[
'values'
],
()
if
tcl_version
<
(
8
,
5
)
else
''
)
check_get_current
(
''
,
-
1
)
self
.
checkParam
(
self
.
combo
,
'values'
,
'mon tue wed thur'
,
expected
=
(
'mon'
,
'tue'
,
'wed'
,
'thur'
))
self
.
checkParam
(
self
.
combo
,
'values'
,
(
'mon'
,
'tue'
,
'wed'
,
'thur'
))
self
.
checkParam
(
self
.
combo
,
'values'
,
(
42
,
3.14
,
''
,
'any string'
))
self
.
checkParam
(
self
.
combo
,
'values'
,
''
,
expected
=
''
if
get_tk_patchlevel
()
<
(
8
,
5
,
10
)
else
())
self
.
combo
[
'values'
]
=
[
'a'
,
1
,
'c'
]
self
.
combo
.
set
(
'c'
)
check_get_current
(
'c'
,
2
)
self
.
combo
.
current
(
0
)
check_get_current
(
'a'
,
0
)
self
.
combo
.
set
(
'd'
)
check_get_current
(
'd'
,
-
1
)
# testing values with empty string
self
.
combo
.
set
(
''
)
self
.
combo
[
'values'
]
=
(
1
,
2
,
''
,
3
)
check_get_current
(
''
,
2
)
# testing values with empty string set through configure
self
.
combo
.
configure
(
values
=
[
1
,
''
,
2
])
self
.
assertEqual
(
self
.
combo
[
'values'
],
(
'1'
,
''
,
'2'
)
if
self
.
wantobjects
else
'1 {} 2'
)
# testing values with spaces
self
.
combo
[
'values'
]
=
[
'a b'
,
'a
\t
b'
,
'a
\n
b'
]
self
.
assertEqual
(
self
.
combo
[
'values'
],
(
'a b'
,
'a
\t
b'
,
'a
\n
b'
)
if
self
.
wantobjects
else
'{a b} {a
\t
b} {a
\n
b}'
)
# testing values with special characters
self
.
combo
[
'values'
]
=
[
r'a\tb'
,
'"a"'
,
'} {'
]
self
.
assertEqual
(
self
.
combo
[
'values'
],
(
r'a\tb'
,
'"a"'
,
'} {'
)
if
self
.
wantobjects
else
r'a\\tb {"a"} \}\ \{'
)
# out of range
self
.
assertRaises
(
tkinter
.
TclError
,
self
.
combo
.
current
,
len
(
self
.
combo
[
'values'
]))
# it expects an integer (or something that can be converted to int)
self
.
assertRaises
(
tkinter
.
TclError
,
self
.
combo
.
current
,
''
)
# testing creating combobox with empty string in values
combo2
=
ttk
.
Combobox
(
self
.
root
,
values
=
[
1
,
2
,
''
])
self
.
assertEqual
(
combo2
[
'values'
],
(
'1'
,
'2'
,
''
)
if
self
.
wantobjects
else
'1 2 {}'
)
combo2
.
destroy
()
@add_standard_options
(
IntegerSizeTests
,
StandardTtkOptionsTests
)
class
PanedWindowTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
...
...
@@ -674,7 +674,7 @@ class RadiobuttonTest(AbstractLabelTest, unittest.TestCase):
OPTIONS
=
(
'class'
,
'command'
,
'compound'
,
'cursor'
,
'image'
,
'state'
,
'style'
,
'
padding'
,
'
state'
,
'style'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'value'
,
'variable'
,
'width'
,
)
...
...
@@ -724,7 +724,7 @@ class RadiobuttonTest(AbstractLabelTest, unittest.TestCase):
class
MenubuttonTest
(
AbstractLabelTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'compound'
,
'cursor'
,
'direction'
,
'image'
,
'menu'
,
'state'
,
'style'
,
'image'
,
'menu'
,
'
padding'
,
'
state'
,
'style'
,
'takefocus'
,
'text'
,
'textvariable'
,
'underline'
,
'width'
,
)
...
...
@@ -902,7 +902,7 @@ class ScrollbarTest(AbstractWidgetTest, unittest.TestCase):
@add_standard_options
(
IntegerSizeTests
,
StandardTtkOptionsTests
)
class
NotebookTest
(
AbstractWidgetTest
,
unittest
.
TestCase
):
OPTIONS
=
(
'class'
,
'cursor'
,
'height'
,
'padding'
,
'style'
,
'takefocus'
,
'class'
,
'cursor'
,
'height'
,
'padding'
,
'style'
,
'takefocus'
,
'width'
,
)
def
setUp
(
self
):
...
...
Lib/tkinter/test/widget_tests.py
Dosyayı görüntüle @
2d68f186
...
...
@@ -206,6 +206,33 @@ class AbstractWidgetTest(AbstractTkTest):
break
def
test_keys
(
self
):
widget
=
self
.
create
()
keys
=
widget
.
keys
()
# XXX
if
not
isinstance
(
widget
,
Scale
):
self
.
assertEqual
(
sorted
(
keys
),
sorted
(
widget
.
configure
()))
for
k
in
keys
:
widget
[
k
]
# Test if OPTIONS contains all keys
if
test
.
support
.
verbose
:
aliases
=
{
'bd'
:
'borderwidth'
,
'bg'
:
'background'
,
'fg'
:
'foreground'
,
'invcmd'
:
'invalidcommand'
,
'vcmd'
:
'validatecommand'
,
}
keys
=
set
(
keys
)
expected
=
set
(
self
.
OPTIONS
)
for
k
in
sorted
(
keys
-
expected
):
if
not
(
k
in
aliases
and
aliases
[
k
]
in
keys
and
aliases
[
k
]
in
expected
):
print
(
'
%
s.OPTIONS doesn
\'
t contain "
%
s"'
%
(
self
.
__class__
.
__name__
,
k
))
class
StandardOptionsTests
:
STANDARD_OPTIONS
=
(
'activebackground'
,
'activeborderwidth'
,
'activeforeground'
,
'anchor'
,
...
...
Misc/NEWS
Dosyayı görüntüle @
2d68f186
...
...
@@ -201,6 +201,8 @@ Core and Builtins
Library
-------
-
Issue
#
26177
:
Fixed
the
keys
()
method
for
Canvas
and
Scrollbar
widgets
.
-
Issue
#
21042
:
Make
ctypes
.
util
.
find_library
()
return
the
full
path
on
Linux
,
similar
to
other
platforms
.
Patch
by
Tam
á
s
Bence
Gedai
.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment