我试图将numpad链接到Python代码中的entry字段,但我无法让它工作。我希望有人能帮我这个忙。提前感谢!
我的代码
import tkinter as tk
from PIL import ImageTk
from PIL.ImageTk import PhotoImage
from tkinter import Button
# background
FILENAME = 'C:\Volledig Project\Sealapparaat-800x480.jpg'
root = tk.Tk()
canvas = tk.Canvas(root, width=800, height=480)
canvas.pack()
tk_img = ImageTk.PhotoImage(file=FILENAME)
canvas.create_image(400, 240, image=tk_img)
entry1 = tk.Entry(root)
entr1_windows = canvas.create_window(30, 300, anchor="nw", window=entry1)
muted3 = False
def mute_picture():
global muted3
if muted3:
volumeKnop3.configure(image=volumePhoto3)
muted3 = False
root.after(int(entry1.get()), mute_picture)
else:
volumeKnop3.configure(image=mutePhoto3)
muted3 = True
root.after(0, mute_picture)
mutePhoto3 = PhotoImage(file="C:\Volledig Project\Time_Done.png")
volumePhoto3 = PhotoImage(file="C:\Volledig Project\Time_Not_Done.png")
volumeKnop3 = Button(image=volumePhoto3, command=mute_picture, background="white", activebackground="White", border=0)
volumeKnop3_window = canvas.create_window(30, 200, anchor="nw", window=volumeKnop3)
root.mainloop()我已经找到并尝试了几个数字,但我无法工作,所以我希望有人有一个好的数字垫,并知道如何在我的代码中实现它。
发布于 2020-09-16 07:54:54
这是我几年前为Raspberry Pi触摸屏应用程序编写的一个numpad示例。它可以工作(不过,我现在可以改进代码)。
单击输入字段以打开Numpad。要使它在代码中工作,请将entry1实例tk.Entry替换为MyNumpadEntry。应该就这么简单。例如
entry1 = NumpadEntry(root)编辑:为添加enumerate_row_column生成器所做的轻微更改。以前的做法并不是很合奏。
from tkinter import *
from tkinter import simpledialog
def enumerate_row_column(iterable, num_cols):
for idx, item in enumerate(iterable):
row = idx // num_cols
col = idx % num_cols
yield row,col,item
class NumpadEntry(Entry):
def __init__(self,parent=None,**kw):
Entry.__init__(self,parent,**kw)
self.bind('<FocusIn>',self.numpadEntry)
self.bind('<FocusOut>',self.numpadExit)
self.edited = False
def numpadEntry(self,event):
if self.edited == False:
print("You Clicked on me")
self['bg']= '#ffffcc'
self.edited = True
new = numPad(self)
else:
self.edited = False
def numpadExit(self,event):
self['bg']= '#ffffff'
class numPad(simpledialog.Dialog):
def __init__(self,master=None,textVariable=None):
self.top = Toplevel(master=master)
self.top.protocol("WM_DELETE_WINDOW",self.ok)
self.createWidgets()
self.master = master
def createWidgets(self):
btn_list = ['7', '8', '9', '4', '5', '6', '1', '2', '3', '0', 'Close', 'Del']
# create and position all buttons with a for-loop
btn = []
# Use custom generator to give us row/column positions
for r,c,label in enumerate_row_column(btn_list,3):
# partial takes care of function and argument
cmd = lambda x = label: self.click(x)
# create the button
cur = Button(self.top, text=label, width=10, height=5, command=cmd)
# position the button
cur.grid(row=r, column=c)
btn.append(cur)
def click(self,label):
print(label)
if label == 'Del':
currentText = self.master.get()
self.master.delete(0, END)
self.master.insert(0, currentText[:-1])
elif label == 'Close':
self.ok()
else:
currentText = self.master.get()
self.master.delete(0, END)
self.master.insert(0, currentText+label)
def ok(self):
self.top.destroy()
self.top.master.focus()
class App(Frame):
def __init__(self,parent=None,**kw):
Frame.__init__(self,parent,**kw)
self.textEntryVar1 = StringVar()
self.e1 = NumpadEntry(self,textvariable=self.textEntryVar1)
self.e1.grid()
self.textEntryVar2 = StringVar()
self.e2 = NumpadEntry(self,textvariable=self.textEntryVar2)
self.e2.grid()
if __name__ == '__main__':
root = Tk()
root.geometry("200x100")
app = App(root)
app.grid()
root.mainloop()https://stackoverflow.com/questions/63914121
复制相似问题