0

プログラム内のいくつかのオブジェクトにTixExFileSelectDialog関連付けられているがあります。Entry選択したファイルが、ダイアログが使用されているダイアログのテキストと一致するように、ダイアログが動的に構成されますEntry。ただし、ダイアログを初めて開いたときは、どちらを使用したかに関係なく、すでにデフォルト値が設定されているEntry場合でも、パターン文字列のみが表示されます。Entryただし、ダイアログをキャンセルしてから再度開くと、適切な文字列が表示されます。これは、コンボボックスselectionvalueオプション(一方、他方、および両方)の任意の組み合わせを設定した場合、およびコンボボックスのvariableオプションをに設定した場合に発生しますStringVarTixComboBoxsの機能に欠けているものはありますか?

私が現在使用しているコード(投稿用の再フォーマットなどを含む):

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()
4

1 に答える 1

0

結局のところ、現在のOSのルックアンドフィールを使用して、askopenfilename()fromを使用するだけで必要な機能を正確に取得できるため、そもそもこれを行う必要はありませんでした。tkinter.filedialogTixについてはこれだけです。

(まあ、それは私が望んでいたものではありませんでし。外観はまだWindowsで少し古くなっていたのですが、十分に近かったです。[IDLEもそれを使用しているようです。])

于 2012-07-27T18:08:38.263 に答える