Форум сайта python.su
Бить его. Ногами :)
Держи. Только под 2.Х, так как в 3.Х не работаю.
# -*- coding: utf-8 -*- import os import Tkinter as tk import tkFileDialog import tkMessageBox class Application(tk.Frame): def __init__(self, master=None): tk.Frame.__init__(self, master, bd=3) self.pack() self.createWidgets() def createWidgets(self): self.finput=tk.Entry(self, width=48) self.finput.pack(side = 'left') self.b_select=tk.Button(self, text=u'Выбрать', command=self.select_file).pack(side = 'right') def select_file(self): self.finput.delete(0, "end") self.finput.insert(0, tkFileDialog.askopenfilename(initialdir=os.path.expanduser('~'))) tkMessageBox.showinfo(u'Имя', self.finput.get()) app = Application() app.mainloop()
Офлайн
Использование StringVar достаточно частая практика. Но это сильно путает код. Хотя - личное дело каждого :)
Офлайн
И, как я понимаю, парню нужно было вот это (первый же день изучает, Shaman, ну Вы даете :) )
import Tkinter import tkFileDialog root = Tkinter.Tk().withdraw() path_to_file = tkFileDialog.askopenfilename() print path_to_file
Отредактировано 4kpt (Июль 14, 2013 23:39:52)
Офлайн
Благодарю.
Помню, мучился с отличиями в Тк для 2-й и 3-й версии. Не получалось взять код от второй и просто изменить регистры имён.
Офлайн
+ Классы диалогов разнесены в отдельные модули, а не внутри tkinter…
Офлайн
lion9самое простое - написать для файлов: в одном - одни слова, в другом - другие
В этой конструкции не понимаю ни как сделать бэкап (имя обрабатываемого файла должно оставаться неизменным), ни как сделать множественные замены, а не один символ на другой символ. В идеале слова, по которым производится поиск, должны всё же вводиться через поле в GUI, чтоб было более user-friendly, при этом - да, мне всё же нравится Ваше предложение насчёт конфига… было бы здорово, если бы каждую конфигурацию можно было сохранять. А для этого нужно как-то сохранять через GUI список, а затем делать его импорт… Лишь сегодня начал копаться в Python, поэтому пока в отношении решения данной задачи в полной растерянности.
Офлайн
py.user.nextДа, полностью согласен. По задумке - это и будут два файла конфигурации. А создавать и дополнять/изменять их нужно будет через GUI.
самое простое - написать для файлов: в одном - одни слова, в другом - другие
но файлы - это тоже разновидность интерфейса
нужно написать часть, которая может получать данные через любой интерфейс, и для начала использовать интерфейс в виде двух файлов
Отредактировано lion9 (Июль 15, 2013 00:19:01)
Офлайн
lion9неважно, что задумано изначально, потом может всё измениться
По задумке - это и будут два файла конфигурации.
Офлайн
Сваял следующее… Работать работает, но ни о каком GUI речь не идёт…
# Сделать бэкап файла import sys, string, os, shutil shutil.copyfile("D:/UNBREAKABLE_SPACES/inputfile/file.docx_en-US_ru-RU.sdlxliff", "D:/UNBREAKABLE_SPACES/backup/file.docx_en-US_ru-RU.sdlxliff") # Открыть файл file = open ('D:/UNBREAKABLE_SPACES/inputfile/file.docx_en-US_ru-RU.sdlxliff', 'r', encoding='utf-8') text = file.read() file.close() # Определить функцию замены def replace_all(text, dic): for i, j in dic.items(): text = text.replace(i, j) return text # Словарь со значениями reps = {'term1':'replacement1', 'term2':'replacement2'} # Произвести замену replaced = replace_all(text, reps) # Сохранить изменённый текст в новом файле filereplaced = open('D:/UNBREAKABLE_SPACES/file.sdlxliff', 'w', encoding='utf-8') filereplaced.write(replaced) filereplaced.close()
Отредактировано lion9 (Июль 19, 2013 19:46:15)
Офлайн
class FileProcessor: def backup(self, name): b = Backuper() b.backup(name) def replace(self, name): r = Replacer() r.replace_by_dict(name, wdict) class Backuper: def backup(self, name): pass class Replacer: def replace_by_dict(self, name, wdict): pass def process_files() fp = FileProcessor() names = get_names() for name in names: fp.backup(name) fp.replace(name) def get_names(self): name = 'D:/UNBREAKABLE_SPACES/inputfile/file.docx_en-US_ru-RU.sdlxliff' return [name] if __name__ == '__main__': process_files()
Офлайн