Аз съм нов в програмирането и нов в python. Току-що разработих първия си скрипт, той обработва файла, но в момента само от командния ред.
За мен това е просто хоби, така че работата ми не зависи от него :-)
Прекарах няколко дни в опити да се ориентирам в разработката на Python gui и стигнах до заключението, че трябва да съм глупав.
Разгледах wxpython & Tkinter и също не разбирам, въпреки че Tkinter изглежда е по-лесният от двата. Дори съм разглеждал инструменти на wysiwyg като Boa Contricor & wxglade. Дори не разбирам как да ги използвам. Така или иначе бих предпочел просто да се придържам към моя редактор и код ръчно.
Моят проблем е следният:
Бих искал да създам прозорец на работния плот с 1 или два обекта, в зависимост от това кое работи най-добре. Ако само един обект, тогава текстово поле от някакъв вид, ако 2 обекта, тогава текстово поле и изображение.
Искам да мога да плъзгам файл от файловия мениджър и да го пускам в прозореца на моя скрипт, това е само за да предам имената на файловете на моя скрипт.
След това искам да пренасоча stdout към обект в прозореца на работния плот, така че целият изход от скрипта да се показва в прозореца на работния плот.
Не съм сигурен дали един обект може да прави и двете неща или не. Ако може, просто текстово поле би било достатъчно, иначе пуснете файлове върху изображение и пренасочете изхода към текстовото поле.
Намерих примери за плъзгане и пускане в мрежата, но нищо, което да включва пренасочване на stdout, и не успях успешно да модифицирам нито един от примерите, на които се натъкнах.
Ако някой мил има време да демонстрира как да постигна това, което искам и да обясни как работи, ще съм много благодарен!
----РЕДАКТИРАНЕ ----
Играх си с 2 примера и успях да хеширам 2-та заедно, за да направя това, което исках, да работи. Кодът е по-долу. Все още не е изчистено (стари коментари и т.н.), но работи.
#!/usr/bin/python
# The next two lines are not necessary if you installed TkDnd
# in a proper place.
import os
from Tkinter import *
os.environ['TKDND_LIBRARY'] = '/home/clinton/Python/tkdnd2.6/'
import Tkinter
from untested_tkdnd_wrapper import TkDND
class Redir(object):
# This is what we're using for the redirect, it needs a text box
def __init__(self, textbox):
self.textbox = textbox
self.textbox.config(state=NORMAL)
self.fileno = sys.stdout.fileno
def write(self, message):
# When you set this up as redirect it needs a write method as the
# stdin/out will be looking to write to somewhere!
self.textbox.insert(END, str(message))
root = Tkinter.Tk()
dnd = TkDND(root)
textbox = Tkinter.Text()
textbox.pack()
def handle(event):
event.widget.insert(END, event.data)
content = textbox.get("0.0",Tkinter.END)
filename = content.split()
dnd.bindtarget(textbox, handle, 'text/uri-list')
#Set up the redirect
stdre = Redir(textbox)
# Redirect stdout, stdout is where the standard messages are ouput
sys.stdout = stdre
# Redirect stderr, stderr is where the errors are printed too!
sys.stderr = stdre
# Print hello so we can see the redirect is working!
print "hello"
# Start the application mainloop
root.mainloop()
Примери за това са: python плъзгане и пускане на файлове Explorer към запис в tkinter джаджа
А също и примерът, любезно предоставен от Noelkd.
За да работи този код, трябва да създадете обвивката от първия пример. Освен това понастоящем кодът просто показва изтегления файл в прозореца, но променливата е на място, за да бъде предадена на скрипта, който работи зад интерфейса на GUI.