Форум сайта python.su
А как сделать
ChooseOutDir()
PATH
statusbar.config(text = dn)
Офлайн
Как то так ?
from Tkinter import *
import tkFileDialog
PATH = ""
def ChooseOutDir():
global PATH
PATH = tkFileDialog.askdirectory()
def PrintPATH():
statusbar.config(text = PATH)
root = Tk()
Button(text="Open File Dialog", command=ChooseOutDir).pack()
Button(text="Print PATH", command=PrintPATH).pack()
statusbar = Label(text="", bd=1, relief=SUNKEN, anchor=W)
statusbar.pack(side=BOTTOM, fill=X)
root.mainloop()
Офлайн
А вот такое вам как?
#!/usr/bin/env python32
from tkinter import *
from tkinter.filedialog import askopenfilename
def ChooseFile(event):
a = askopenfilename()
root=Tk()
#простой способ - через параметр "command" - все нормально, кнопка не
#западает, а возвращается после нажатия обратно
outdirbtn=Button(root, text="Open File Dialog", command = askopenfilename)
# нажатием на кнопку правой клавишей мыши - тоже все О.К.
outdirbtn.bind("<Button-3>", ChooseFile)
# через фокус клавишей "Enter" - тоже все О.К.
outdirbtn.bind("<Return>", ChooseFile)
#а вот здесь странное поведение: при нажатии левой клавишей мыши
#кнопка после диалога выбора файла "западает", т.е. не возвращается в верхнее положение
# и остается "нажатой"
outdirbtn.bind("<Button-1>", ChooseFile)
outdirbtn.pack()
root.mainloop()
Отредактировано x-ray (Сен. 4, 2013 20:14:39)
Офлайн
Вообще не понял, что Вы этим хотели сказать.
Все правильно работает. Разберитесь в потоке событий. Если хотите, чтобы кнопка “возвращалась” в исходное положение, то измените строку
outdirbtn.bind("<Button-1>", ChooseFile)
outdirbtn.bind("<ButtonRelease-1>", ChooseFile)
outdirbtn.bindtags(("Button", outdirbtn))
from tkinter import * from tkinter.filedialog import askopenfilename
Отредактировано 4kpt (Сен. 4, 2013 22:17:18)
Офлайн
Благодарю за ответ! Вариант через <ButtonRelease-1> помог. Если можно - еще несколько вопросов:
1. А что Вас удивило в
from tkinter import * from tkinter.filedialog import askopenfilename
Офлайн
Исправлю Ваш код.
#!/usr/bin/env python32 # import tkinter # def ChooseFile(): file_ = tkinter.filedialog.askopenfilename() # root = tkinter.Tk() outdirbtn = tkinter.Button(root, text="Open File Dialog", command = ChoiseFile) outdirbtn.pack() # root.mainloop()
Отредактировано 4kpt (Сен. 4, 2013 23:32:05)
Офлайн
x-ray
2. Почему такое поведение только на левой кнопке мыши? У меня нет подробной спецификации…
Отредактировано 4kpt (Сен. 5, 2013 00:14:58)
Офлайн
Еще раз благодарю за объяснение, все достаточно подробно и понятно (Вам бы книги по питону писать). Если можно - еще пара вопросов (как говорится - раз пошла такая пьянка…. )))
- в объяснении указаны 2 события ButtonPress - 1 и ButtonRelease - 1, но вместо ButtonPress-1 я использовал Button-1, но может это и не столь важно..
- и все-таки почему так реагирует только левая кнопка мыши, а с правой (да и с “Enter” тоже) - проблем нет? Ну это так - для расширения кругозора….
Офлайн
x-ray
в объяснении указаны 2 события ButtonPress - 1 и ButtonRelease - 1, но вместо ButtonPress-1 я использовал Button-1, но может это и не столь важно.
x-ray
- и все-таки почему так реагирует только левая кнопка мыши, а с правой (да и с “Enter” тоже) - проблем нет? Ну это так - для расширения кругозора….
outdirbtn.bind("<a>", press)
Отредактировано 4kpt (Сен. 5, 2013 21:09:51)
Офлайн
Вот теперь я полностью разобрался, огромное спасибо! Предпочитаю понимать процесс, а не тупо копировать чужие решения….
Ну если я Вас не очень “достал” своими вопросами - по-поводу использования вариантов import tkinter или from tkinter import * - в разных источниках я видел оба способа, причем достаточно известных авторов по питону, например в книге Саммерфилда “Программирование на Python 3” в главах по GUI на питоне используется вариант import tkinter, ну и соотвественно приставка tkinter в коде, а Марк Лутц в “Программирование на Python том-1” предлагается вариант, from tkinter import * , код не загружен приставкой tkinter к классам-объектам. Также и сети - на разных ресурсах используют оба варианта. Как по-вашему - что лучше и почему достаточно известные источники по-разному это делают? Причем способ, где, как Вы говорили, происходит двойное импортирование (с перечислением типа from tkinter.filedialog import askopenfilename) я взял именно у Лутца…
P.S. А насчет клиента - так ведь он реально прав в том случае! Сам предпочитаю работать больше с клавиатурой (быстрее и удобнее), даже немного освоил “слепой” метод. Поэтому не понимаю интерфейсов программ, на которых работают только мышью, очень неудобно! Вот и делаю для себя и друзей оба варианта нажатия на кнопки.
P.S. А ведь никогда раньше не замечал, что Enter-ом кнопка работает но эффекта нажатия нет!
Отредактировано x-ray (Сен. 5, 2013 22:20:25)
Офлайн