Merhaba,
Tkinter’de bir arka plan resmi oluşturmak ve üzerinde belli koordinatlara bazı yazılar getirmek istiyorum. Daha sonra bu sayfayı yazdıracağım.
from tkinter import *
root = Tk()
root.geometry("595x682+100+0")
# --------- SCROOLBAR SETİ ----------
def update_layout():
inside.update_idletasks()
canv.configure(scrollregion=canv.bbox('all'))
canv.yview('moveto', '1.0')
size = inside.grid_size()
def on_configure(event):
w, h = event.width, event.height
natural = inside.winfo_reqwidth()
canv.itemconfigure('inner', width=w if w > natural else natural)
canv.configure(scrollregion=canv.bbox('all'))
canv = Canvas(root, bd=0, highlightthickness=0, bg="#eeeeee")
canv.pack(side=LEFT, expand=1, fill=BOTH, )
scrollbar = Scrollbar(root, orient='vertical', command=canv.yview)
scrollbar.pack(side=LEFT, fill='y')
inside = Frame(canv, bg="#fefeee")
inside.grid_columnconfigure(0, weight=1)
canv.create_window((0, 0), window=inside, anchor='nw', tags='inner')
canv.configure(yscrollcommand=scrollbar.set)
canv.bind('<Configure>', on_configure)
def right_click(event):
print("coor: ", event.x, event.y)
root.bind("<ButtonPress-3>", right_click)
ft_img = PhotoImage(file='Fatura.gif') # A4 size - 595 x 842 pixel
canv.create_image(1, 1, image=ft_img, anchor="nw") # 1) <---!!!!
#Label(inside, image=ft_img).pack() # 2) <---!!!!
sozluk = {}
item_no = 2
liste = ["İsim", "Adres", "VD", ""]
yazilar = ["Koç Tex", "Merter", "12345", "18.10.1998"]
yan = 100
for z in yazilar:
canv.create_text(100, yan, fill="darkblue", font="Arial 11",
text=z, tags="token", anchor='nw')
yan += 20
item_no += 1
mainloop()
Arka planda A4 boyutlu kağıdın görüntüsünü kullandım. (A4 boyutu - 595 x 842 piksel). Üzerine gelecek yazılar için iki yöntem kullanabilirim.
Satır43: Label(inside, image = ft_img).pack ()
Label kullandığımda arka plan görüntüsünü alıyorum, ancak for döngüsü içindeki verileri gösteremiyorum. (Daha sonra sürüklenerek belli yerlere taşınacak yazılar)
Satır 42: canv.create_image(1, 1, image = ft_img, anchor = "nw")
Eğer create_image kullanırsam, yazılar istediğim şekilde görünüyot, ancak canvaspiksel durumunu kaybeder. Örneğin, sayfanın alt kenarındaki 675px, kaydırma çubuğunu aşağı kaydırdığımda yine 675 değerini veriyor. (Bunu, sayfanın herhangi bir yerinde sağ tıklayarak test edebilirsiniz)
Düşeyde root.geometry() içinde belirlediğim pixelden daha fazlasını alamıyorum. Bu nedenle, öğeleri gereken yerlere taşıyamıyorum.
Bir fatura tasarım programı yapmaya çalışıyorum. İstenen metni basılı kağıtların uygun yerlerine yazdırmak için. Yazıları taşımayı başardım, ancak bu problemi bir türlü halledemedim. Fikirlerinizi paylaşırsanız çok sevinirim.
Selamlar