第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在點擊時獲得最近的 tkinter 畫布元素?

如何在點擊時獲得最近的 tkinter 畫布元素?

人到中年有點甜 2021-10-19 17:16:14
我正在使用 tkinter 進行一個非常簡單的 python 編程。我想在畫布上繪制一些矩形,然后當單擊某個矩形時,顯示該矩形的標簽。我無法讓它工作。問題似乎是無論我在畫布上單擊何處,函數(shù) get_closest 都會返回 1。感謝任何幫助。這是我第一次使用 tkinter(以及與此相關的 python),因此也歡迎對我的代碼進行與問題本身無關的任何評論!import tkinter as tkmyrecs = [[None for j in range(4)] for i in range(4)]class application:    def __init__(self, parent):        self.parent = parent        self.frame = tk.Frame(self.parent)        self.frame.grid(row=0)        self.quitbutton = tk.Button(self.frame, text = "Quit", command = lambda:quit())        self.quitbutton.grid(row=0, column = 0, sticky=tk.W + tk.E)        self.canvas = tk.Canvas(self.frame, width=200, height=200, bg = "blue")        self.canvas.bind("<ButtonPress-1>", self.buttonclick)        self.canvas.grid(row=1, columnspan = 2)        self.tag = self.canvas.create_text(10, 150, text="", anchor="nw")         self.makebutton = tk.Button(self.frame, text = "Make nice canvas", command = self.makecanvas)        self.makebutton.grid(row=0, column = 1, sticky = tk.W + tk.E)    def makecanvas(self):        for i in range(4):            for j in range(4):                myrecs[i][j] = self.canvas.create_rectangle(20*i, 20*j, 20*(i+1), 20*(j+1), tags=("rectangle", "i"+str(i), "j"+str(j)))        def buttonclick(self, event):        cnv = self.canvas        item = cnv.find_closest(cnv.canvasx(event.x), cnv.canvasy(event.y))[0]        tags = cnv.gettags(item)        cnv.itemconfigure(self.tag, text=tags[0])  if __name__ == "__main__":    root = tk.Tk()    root.title("Test")    app = application(root)    root.mainloop()
查看完整描述

1 回答

?
紫衣仙女

TA貢獻1839條經(jīng)驗 獲得超15個贊

find_closest返回1意味著它正在查找您在畫布中創(chuàng)建的第一個元素,在本例中是create_text.


奇怪的是,當你create_text使用text=""它時,它似乎超越了你所有的其他元素。通過一個簡單的修復,text=" "現(xiàn)在可以在點擊時找到壁櫥矩形。


對于其他元素,當您分配option=""它時實際上會禁用(據(jù)我所知)該選項,因此您不是使用其默認值,而是主動告訴tcl解釋器不要使用它。這可以在其他元素中觀察到,例如create_rectangle(..., outline="")默認值outline="black"將不再適用,您甚至不會得到大綱。我有一種感覺text=""產(chǎn)生了類似的效果,并且由于某種原因基本上覆蓋了整個畫布區(qū)域,因此它會導致find_closest始終返回該元素。也許如果你幸運的話@BryanOakley(一位 tcl 專家)可以加入后端推理。


事實上,如果您嘗試過,find_above(item)您會注意到text始終低于之后繪制的其他元素。


簡而言之:


# Change this:

self.tag = self.canvas.create_text(10, 150, text="", anchor="nw") 


# To this:

self.tag = self.canvas.create_text(10, 150, text=" ", anchor="nw") 


查看完整回答
反對 回復 2021-10-19
  • 1 回答
  • 0 關注
  • 247 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號