python - Tkinter 数据不打印

标签 python tkinter python-2.x tkinter-canvas

我正在执行任务,其中我正在向用户显示图像。用户将单击图像上的任意位置,坐标将被打印。

Tkinter 库 canvas 用于向用户显示图像,允许用户单击图像上的任意位置。

printcoords() 函数有什么问题 - 为什么它不显示任何内容?

这是代码。

from Tkinter import *
import ImageTk
from PIL import Image, ImageDraw
from Tkinter import Tk, Menu, Canvas


if __name__ == '__main__':


        #function on mouse click
    def printcoords(event):
            print "tahir"
            #outputting x and y coords to console
            data.append([event.x,event.y])
            print data
    #mouseclick event 

    root = Tk() 
    img = Image.open("eurecat1.png")
         # Draw grid

    step_count = 50
    draw = ImageDraw.Draw(img)
    y_start = 0
    y_end = img.height
    step_size = int(img.width / step_count)

    for x in range(0, img.width, step_size):
        line = ((x, y_start), (x, y_end))
        draw.rectangle(line, fill="black")

    x_start = 0
    x_end = img.width

    for y in range(0, img.height, step_size):
        line = ((x_start, y), (x_end, y))
        draw.rectangle(((x_start,y), (x_end, y)), fill="black")





   # loadImage(canvas, img)

    filename = ImageTk.PhotoImage(img)
    canvas = Canvas(root,height=img.size[0],width=img.size[0])
    canvas.image = filename  # <--- keep reference of your image
    canvas.create_image(0,0,anchor='nw',image=filename)
    canvas.pack()


    canvas.config(scrollregion=canvas.bbox(ALL))

    frame = Frame(root, bd=2, relief=SUNKEN)
    frame.grid_rowconfigure(0, weight=1)
    frame.grid_columnconfigure(0, weight=1)
    xscroll = Scrollbar(frame, orient=HORIZONTAL)
    xscroll.grid(row=1, column=0, sticky=E+W)
    yscroll = Scrollbar(frame)
    yscroll.grid(row=0, column=1, sticky=N+S)
    canvas = Canvas(frame, bd=0, xscrollcommand=xscroll.set, yscrollcommand=yscroll.set)
    canvas.grid(row=0, column=0, sticky=N+S+E+W)
    xscroll.config(command=canvas.xview)
    yscroll.config(command=canvas.yview)
    frame.pack(fill=BOTH,expand=1)  


    data=[]     

#function on mouse click
    def printcoords(event):
            print "tahir"
            #outputting x and y coords to console
            data.append([event.x,event.y])
            print data
    #mouseclick event



    canvas.bind("<Button 1>", printcoords)

    root.mainloop()

最佳答案

正如 @abamert 提到的,您有两个同名的函数,并且您发布的代码具有不必要的复杂性,对解决问题无济于事。

这是一个可用于修复代码的最小示例:

import Tkinter as tk


def printcoords(event):
    print event.x, event.y


if __name__ == '__main__':

    root = tk.Tk()
    canvas = tk.Canvas(root)
    canvas.pack()
    canvas.bind("<Button 1>", printcoords)

    root.mainloop()

关于python - Tkinter 数据不打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50751630/

相关文章:

pandas - 基于掩码的前向填充数据帧。填写最后一个有效值

python - 使用日期获取 DataFrame 中的异常值

python - 在 NLTK 中使用 PunktSentenceTokenizer

python - 暂停执行,直到从 tkinter 窗口收到用户输入

python - 在列表框中显示组合框中的用户选择时出现问题

Python Tk Canvas 项事件绑定(bind): iterating bindings over multiple items

python - 列表中的随机列表,不重复

python - 为什么 Python 的 unittest 在 WSL bash 中给出 "ImportError: Import by filename is not supported."?

python - 如何使用 beautifulsoup 在嵌套的 div 中获取文本

python - 如何在 python 中以有理数形式打印/显示表达式