Я создаю программу, которая разработана ... ну, она разработана для того, чтобы честно создавать персонажей для D & D.(Я - DM, и я целую вечность собираю листы вместе, когда это должно быть простым процессом, когда я знаю, чего я хочу. Этот код в конечном итоге станет частью большой программы, которая упростит этот процесс с часов до минут.Это того стоит. Все части создания персонажа находятся в отдельном коде, но я работал над тем, чтобы открыть лист персонажа, поместить в него все ответы на вопросы и сохранить результаты на потом.печать.обратите внимание, что я на Python3, используя Windows 8, и все мои модули на самом деле установлены pip да.
Я хочу:
Либо открыть изображение PNG (или PDF)
Запишите на него новую информацию
Сохраните вывод как новый файл.
<Обратите внимание, что я НЕ хочу использовать классы или функции в этом вообще.Я хочу все простые вещи, пожалуйста.>
Что я уже могу сделать:
Открыть PNG (но не исходный PDF. Мне пришлось сначала преобразовать его для SOOя не пойду сюда по многим причинам.)
Показать информацию, которую я хочу, в окне холста на изображении.
К сожалению, я не могу сохранить весь холст.Самым близким, что я получил, был ImageGrab, который на самом деле снимал весь монитор компьютера.и, следовательно, только около 500 * 250 пикселей моего холста (верхний угол).
Мне нужно выяснить, что я здесь делаю неправильно.Я отключил некоторый код, чтобы заставить работать мои полосы прокрутки, я вовсе не утверждаю, что это как моя собственная.У меня проблема с сохранением выводов как что-либо, что я могу просмотреть.Я получил файл postscript, который, когда я помещал его обратно в видимое изображение, все еще приводил к частичной привязке всего холста.Мне нужно что-то, что показывает даже те части, на которые нужно пролистать.
Текущий код вызывает какое-то исключение в пакете Tkinter, который я обнаружил в сети только 27 раз в других случаях, ни один из которых не имеет ответа, который действительно относился к моей ошибке.Я посмотрел и посмотрел и очень ценю помощь в том, как решить эту проблему.
from tkinter import *
import tkinter.ttk as ttk
import PIL.Image as Image
import PIL.ImageTk as ImageTk
import PIL.ImageGrab as ImageGrab
import os
#I imported all these PIL sections seperate because importing the whole
#thing as one, or alltogether on one line caused so many errors in calling
#the functions. my pc for some reason HATES functions, ive NEVER had much
#success with them. hence trying to create programs without them.
def on_vertical(event):
canvas.yview_scroll(-1 * event.delta, 'units')
def on_horizontal(event):
canvas.xview_scroll(-1 * event.delta, 'units')
root = Tk()
root.title('Your Character Here')
h = Scrollbar(root, orient=HORIZONTAL)
v = Scrollbar(root, orient=VERTICAL)
canvas = Canvas(root, scrollregion=(0, 0, 1275, 4960),
yscrollcommand=v.set,
xscrollcommand=h.set)
h['command'] = canvas.xview
v['command'] = canvas.yview
output = ImageTk.PhotoImage(Image.open('charpg4.png'))
canvas.create_image(0,0,image=output, anchor='nw')
canvas.grid(column=0, row=0, sticky=(N,W,E,S))
canvas.bind_all('<MouseWheel>', on_vertical)
canvas.bind_all('<Shift-MouseWheel>', on_horizontal)
h.grid(column=0, row=1, sticky=(W,E))
v.grid(column=1, row=0, sticky=(N,S))
root.grid_columnconfigure(0, weight=1)
root.grid_rowconfigure(0, weight=1)
testing=("one", "two", "three", "testing")
canvas.create_text(210,155,fill='black',font='Helvetica 10',
text=testing)
canvas.update()
grabcanvas=ImageGrab.grab(bbox=canvas).save("test.png")
ttk.grabcanvas.save("test.png")
#the following code works but apparently takes only a direct screenshot
#ImageGrab.grab().save("test.jpg")
#--these others have been tried but dont work for me??
#causes an error with bbox and ImageGrab
#self.grabcanvas = ImageGrab.grab(bbox=canvas)
#Causes the save error, says no such option
#ImageGrab.grab(bbox=canvas).save("test.jpg")
#froze and crashed the game, didnt do anything in the end.
#canvas.postscript(file='test.ps', size =(1275, 4960), colormode='gray')
root.mainloop()
Вот ошибка кода, которая возникает.
Traceback (most recent call last):
File "C:/Users/Autumn/Documents/programs/tests/dnd game/saving
output/windowsize 3.py", line 42, in <module>
grabcanvas=ImageGrab.grab(bbox=canvas).save("test.png")
File "C:\Program Files (x86)\Python36-32\lib\site-
packages\PIL\ImageGrab.py",
line 48, in grab
im = im.crop(bbox)
File "C:\Program Files (x86)\Python36-32\lib\site-
packages\PIL\Image.py",
line 1078, in crop
return self._new(self._crop(self.im, box))
File "C:\Program Files (x86)\Python36-32\lib\site-
packages\PIL\Image.py",
line 1092, in _crop
x0, y0, x1, y1 = map(int, map(round, box))
File "C:\Program Files (x86)\Python36-32\lib\tkinter\__init__.py",
line 1486, in cget
return self.tk.call(self._w, 'cget', '-' + key)
TypeError: must be str, not int
Обычно я решаю, что не так с моим кодом, но я не могу, основываясь на всем, что я нахожу в Интернете, Image.Save или ImageGrab.save или Image.write ... это должно работать в пределах тк.... кажется, что это относится к функции в tkinter, которая не вызывает 'cget' или какую-то строку ... потому что я никогда не помещал целое число в строку, к которой он относится в любом случае, и я никогда не обрезался, поскольку ошибка относится к.