Субвиджет TixComboBox не выбирает / устанавливается на указанное значение при первом использовании
У меня есть TixExFileSelectDialog
что связано с несколькими Entry
объекты в моей программе; диалоговое окно настраивается динамически, чтобы выбранный файл соответствовал тексту в Entry
диалог используется для. Тем не менее, первый раз, когда открывается диалоговое окно, независимо от того, какой Entry
используется, он отображает только строку шаблона, даже когда Entry
уже имеет значение по умолчанию. Однако, если я отменяю диалог и затем снова открываю его, он отображает правильную строку. Это происходит, когда я устанавливаю любую комбинацию со списком selection
а также value
параметры (один, другой и оба), а также когда я устанавливаю поле со списком variable
вариант к StringVar
, Есть ли что-то, что я пропускаю в том, как TixComboBox
с функцией?
Код, который я сейчас использую (с некоторым переформатированием /etc. Для публикации):
from tkinter.tix import *
opts = {'path': 'C:\\'}
class ImportGUI(Frame):
def _setfsd(self, directory='', pattern='*.xls', variable='', selection=None):
"Reconfigures the ExFileSelectDialog to enable reusability."
self.fsd.fsbox.config(directory=directory or opts['path'], # can't use opts['path'] as a default argument, because it could change.
pattern=pattern)
self.fsd.fsbox.file['variable'] = variable
if not variable:
self.fsd.fsbox.file['value'] = selection or pattern # Defaults to the pattern, which is the behavior of a fresh ExFileSelectionBox.
elif selection is not None: # variable exists, but setting selection manually as well
self.fsd.fsbox.file['value'] = selection
def _selectdatafile(self):
self._setfsd(selection='apple1.xls')
self.fsd.popup()
def _selectcodefile(self):
self._setfsd(selection='apple2.xls')
self.fsd.popup()
def createWidgets(self):
self.fsd = ExFileSelectDialog(self.master) # a top-level widget, so giving it the default root as master
self.dfrow = Frame(self)
self.cfrow = Frame(self)
self.dfentry = Entry(self.dfrow)
self.dfentry.pack(side='left')
self.cfentry = Entry(self.cfrow)
self.cfentry.pack(side='left')
self.dfbtn = Button(self.dfrow, text='...', command=self._selectdatafile)
self.dfbtn.pack(side='left')
self.cfbtn = Button(self.cfrow, text='...', command=self._selectcodefile)
self.cfbtn.pack(side='left')
self.dfrow.pack()
self.cfrow.pack()
self.pack()
def __init__(self, master=None):
Frame.__init__(self, master)
self.master.tk.eval('package require Tix')
self.createWidgets()
if __name__ == '__main__': # for testing
gui = ImportGUI()
gui.mainloop()
1 ответ
Оказывается, мне не нужно было ничего делать, потому что я могу просто использовать askopenfilename()
от tkinter.filedialog
чтобы получить именно ту функциональность, которую я желаю, используя внешний вид текущей ОС. Так много для Тикса.
(Ну, это было несовсем то , что я хотел, так как внешний вид был немного устаревшим в Windows, но он был достаточно близок. [IDLE, кажется, тоже использует его, в этом отношении.])