首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tkinter python中的numpad

tkinter python中的numpad
EN

Stack Overflow用户
提问于 2020-09-16 06:12:03
回答 1查看 885关注 0票数 0

我试图将numpad链接到Python代码中的entry字段,但我无法让它工作。我希望有人能帮我这个忙。提前感谢!

我的代码

代码语言:javascript
复制
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()

我已经找到并尝试了几个数字,但我无法工作,所以我希望有人有一个好的数字垫,并知道如何在我的代码中实现它。

EN

回答 1

Stack Overflow用户

发布于 2020-09-16 07:54:54

这是我几年前为Raspberry Pi触摸屏应用程序编写的一个numpad示例。它可以工作(不过,我现在可以改进代码)。

单击输入字段以打开Numpad。要使它在代码中工作,请将entry1实例tk.Entry替换为MyNumpadEntry。应该就这么简单。例如

代码语言:javascript
复制
entry1 = NumpadEntry(root)

编辑:为添加enumerate_row_column生成器所做的轻微更改。以前的做法并不是很合奏。

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63914121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档