Skip to content

Commit 4a8d97b

Browse files
committed
Update python_easy_chess_gui.py
* Replace engine selection combo box element with box list element.
1 parent fb2715d commit 4a8d97b

1 file changed

Lines changed: 35 additions & 35 deletions

File tree

python_easy_chess_gui.py

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
import queue
3939
import copy
4040
import time
41-
import random
4241
from datetime import datetime
4342
import pyperclip
4443
import chess
@@ -53,7 +52,7 @@
5352

5453

5554
APP_NAME = 'Python Easy Chess GUI'
56-
APP_VERSION = 'v0.67'
55+
APP_VERSION = 'v0.68'
5756
BOX_TITLE = '{} {}'.format(APP_NAME, APP_VERSION)
5857

5958

@@ -983,16 +982,11 @@ def play_game(self, engine_id_name, board):
983982
logging.info('Backup current engine list and file.')
984983
logging.info('Current engine list: {}'.format(current_engine_list))
985984
logging.info('Current engine file: {}'.format(current_engine_file))
986-
987-
# Vary Combo box or sg.Drop key, to avoid duplicate key error.
988-
# Tkinter does not like PySimpleGUI v3.37 so far.
989-
# ecbk = engine_combo_box_key
990-
ecbk = str(random.randint(0,1000000))
991985

992986
layout = [
993-
[sg.T('Engine file', size=(12,1)),
994-
sg.Drop(self.engine_list, size=(32, 1), key=ecbk,
995-
enable_events=True)],
987+
[sg.T('Engine file', size=(12,1))],
988+
[sg.Listbox(values=self.engine_list, size=(48,6),
989+
bind_return_key = True, key='engine_file_k')],
996990
[sg.T('Engine name', size=(12,1)), sg.T(
997991
self.get_engine_id_name(), key='engine_name_k')],
998992
[sg.T('Threads', size=(12, 1)),
@@ -1011,6 +1005,7 @@ def play_game(self, engine_id_name, board):
10111005
e, v = w.Read(timeout=10)
10121006

10131007
if e is None or e == 'Cancel':
1008+
# Restore current engine list and file
10141009
logging.info('User cancels engine selection. ' +
10151010
'We restore the current engine data.')
10161011
self.engine_list = current_engine_list
@@ -1020,8 +1015,8 @@ def play_game(self, engine_id_name, board):
10201015
logging.info('current engine file: {}'.format(self.engine_file))
10211016
break
10221017

1023-
if e == ecbk:
1024-
self.engine_file = v[ecbk]
1018+
if e == 'engine_file_k':
1019+
self.engine_file = v['engine_file_k'][0]
10251020
engine_id_name = self.get_engine_id_name()
10261021
w.FindElement('engine_name_k').Update(engine_id_name)
10271022
self.update_engine_list()
@@ -1033,11 +1028,15 @@ def play_game(self, engine_id_name, board):
10331028

10341029
threads_value = int(v['threads_k'])
10351030
self.threads = min(MAX_THREADS, max(MIN_THREADS, threads_value))
1031+
1032+
self.engine_file = v['engine_file_k'][0]
1033+
engine_id_name = self.get_engine_id_name()
1034+
w.FindElement('engine_name_k').Update(engine_id_name)
1035+
self.update_engine_list()
10361036
break
10371037

10381038
w.Close()
10391039
self.window.UnHide()
1040-
10411040
self.update_labels_and_game_tags(human='Human',
10421041
engine_id=self.get_engine_id_name())
10431042
continue
@@ -1122,16 +1121,11 @@ def play_game(self, engine_id_name, board):
11221121
logging.info('Backup current engine list and file.')
11231122
logging.info('Current engine list: {}'.format(current_engine_list))
11241123
logging.info('Current engine file: {}'.format(current_engine_file))
1125-
1126-
# Vary Combo box or sg.Drop key, to avoid duplicate key error.
1127-
# Tkinter does not like PySimpleGUI v3.37 so far.
1128-
# ecbk = engine_combo_box_key
1129-
ecbk = str(random.randint(0,1000000))
11301124

11311125
layout = [
1132-
[sg.T('Engine file', size=(12,1)),
1133-
sg.Drop(self.engine_list, size=(32, 1), key=ecbk,
1134-
enable_events=True)],
1126+
[sg.T('Engine file', size=(12,1))],
1127+
[sg.Listbox(values=self.engine_list, size=(48,6),
1128+
bind_return_key = True, key='engine_file_k')],
11351129
[sg.T('Engine name', size=(12,1)), sg.T(
11361130
self.get_engine_id_name(), key='engine_name_k')],
11371131
[sg.T('Threads', size=(12, 1)),
@@ -1150,6 +1144,7 @@ def play_game(self, engine_id_name, board):
11501144
e, v = w.Read(timeout=10)
11511145

11521146
if e is None or e == 'Cancel':
1147+
# Restore current engine list and file
11531148
logging.info('User cancels engine selection. ' +
11541149
'We restore the current engine data.')
11551150
self.engine_list = current_engine_list
@@ -1159,8 +1154,8 @@ def play_game(self, engine_id_name, board):
11591154
logging.info('current engine file: {}'.format(self.engine_file))
11601155
break
11611156

1162-
if e == ecbk:
1163-
self.engine_file = v[ecbk]
1157+
if e == 'engine_file_k':
1158+
self.engine_file = v['engine_file_k'][0]
11641159
engine_id_name = self.get_engine_id_name()
11651160
w.FindElement('engine_name_k').Update(engine_id_name)
11661161
self.update_engine_list()
@@ -1172,11 +1167,15 @@ def play_game(self, engine_id_name, board):
11721167

11731168
threads_value = int(v['threads_k'])
11741169
self.threads = min(MAX_THREADS, max(MIN_THREADS, threads_value))
1170+
1171+
self.engine_file = v['engine_file_k'][0]
1172+
engine_id_name = self.get_engine_id_name()
1173+
w.FindElement('engine_name_k').Update(engine_id_name)
1174+
self.update_engine_list()
11751175
break
11761176

11771177
w.Close()
11781178
self.window.UnHide()
1179-
11801179
self.update_labels_and_game_tags(human='Human',
11811180
engine_id=self.get_engine_id_name())
11821181
continue
@@ -1823,16 +1822,11 @@ def main_loop(self):
18231822
logging.info('Backup current engine list and file.')
18241823
logging.info('Current engine list: {}'.format(current_engine_list))
18251824
logging.info('Current engine file: {}'.format(current_engine_file))
1826-
1827-
# Vary Combo box or sg.Drop key, to avoid duplicate key error.
1828-
# Tkinter does not like PySimpleGUI v3.37 so far.
1829-
# ecbk = engine_combo_box_key
1830-
ecbk = str(random.randint(0,1000000))
18311825

18321826
layout = [
1833-
[sg.T('Engine file', size=(12,1)),
1834-
sg.Drop(self.engine_list, size=(32, 1), key=ecbk,
1835-
enable_events=True)],
1827+
[sg.T('Engine file', size=(12,1))],
1828+
[sg.Listbox(values=self.engine_list, size=(48,6),
1829+
bind_return_key = True, key='engine_file_k')],
18361830
[sg.T('Engine name', size=(12,1)), sg.T(
18371831
self.get_engine_id_name(), key='engine_name_k')],
18381832
[sg.T('Threads', size=(12, 1)),
@@ -1862,9 +1856,9 @@ def main_loop(self):
18621856
logging.info('current engine file: {}'.format(self.engine_file))
18631857
break
18641858

1865-
# If user changes the engine file via the combo or drop box
1866-
if e == ecbk:
1867-
self.engine_file = v[ecbk]
1859+
# If user double-clicked the engine or select and press enter key
1860+
if e == 'engine_file_k':
1861+
self.engine_file = v['engine_file_k'][0]
18681862
engine_id_name = self.get_engine_id_name()
18691863
w.FindElement('engine_name_k').Update(engine_id_name)
18701864
self.update_engine_list()
@@ -1876,6 +1870,12 @@ def main_loop(self):
18761870

18771871
threads_value = int(v['threads_k'])
18781872
self.threads = min(MAX_THREADS, max(MIN_THREADS, threads_value))
1873+
1874+
# In case the user did not double-click the engine selection
1875+
self.engine_file = v['engine_file_k'][0]
1876+
engine_id_name = self.get_engine_id_name()
1877+
w.FindElement('engine_name_k').Update(engine_id_name)
1878+
self.update_engine_list()
18791879
break
18801880

18811881
# Close the new window and restore/unhide the main window

0 commit comments

Comments
 (0)