Я новичок в программировании и новичок в python. Я только что разработал свой первый скрипт, он обрабатывает файл, но пока только из командной строки.
Для меня это просто хобби, так что моя работа от этого не зависит :-)
Я провел несколько дней, пытаясь разобраться в разработке графического интерфейса Python, и пришел к выводу, что я, должно быть, глуп.
Я просмотрел wxpython и Tkinter и тоже не понял, хотя Tkinter кажется проще из двух. Я даже смотрел на инструменты wysiwyg, такие как Boa Contrictor и wxglade. Я даже не понимаю, как их использовать. В любом случае я бы предпочел просто придерживаться моего редактора и кода вручную.
Моя проблема заключается в следующем:
Я хотел бы создать окно рабочего стола с одним или двумя объектами, в зависимости от того, что работает лучше всего. Если только один объект, то какое-то текстовое поле, если 2 объекта, то текстовое поле и изображение.
Я хочу иметь возможность перетаскивать файлы из файлового менеджера и помещать их в окно сценария, это просто для передачи имен файлов моему сценарию.
Затем я хочу перенаправить стандартный вывод на объект в окне моего рабочего стола, чтобы весь вывод скрипта отображался в окне рабочего стола.
Я не уверен, может ли один объект делать обе вещи или нет. Если это возможно, будет достаточно только текстового поля, иначе перетащите файлы на изображение и перенаправьте вывод в текстовое поле.
Я нашел примеры перетаскивания в Интернете, но ничего, что включало бы перенаправление stdout, и мне не удалось успешно изменить ни один из примеров, с которыми я столкнулся.
Если у кого-то найдется время продемонстрировать, как добиться того, чего я хочу, и объяснить, как это работает, я был бы очень признателен!
----РЕДАКТИРОВАТЬ ----
Я играл с двумя примерами, и мне удалось хэшировать их вместе, чтобы получить то, что я хотел. Код ниже. Он еще не очищен (старые комментарии и т.д.), но работает.
#!/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 в запись tkinter виджет
А также пример, любезно предоставленный Noelkd.
Чтобы этот код работал, вы должны создать оболочку из первого примера. Также в настоящее время код просто отображает перетаскиваемый файл в окне, однако существует переменная для передачи в скрипт, который выполняется за интерфейсом графического интерфейса.