我想用Tkinter做一個鍵盤快捷操作命令。鍵盤事件會調用一個函數:當我按'b'
,執行功能'buy'
,當我按's'
時,執行功能'sell'
。但是在我的GUI中有一個條目。當我在此條目中輸入一個數字時,我將按'b'調用功能'buy'
或按's'
調用功能'sell'
。當然,條目將顯示'b'
或's'
。我想在調用's'
或'b'
時調用功能,該條目將只是區分和顯示數字。我可以如何達到這個目的? 這裏是我的代碼:如何避免python Tkinter中的鍵盤衝突?
# -*- coding: utf-8 -*-
from Tkinter import *
import tkFont
import datetime
class TradeSystem(object):
"""docstring for TradeSystem"""
def __init__(self):
self.root = Tk()
self.root.geometry('465x180')
self.root.resizable(width=True, height=False)
Label(self.root, text = 'Volume',font = tkFont.Font(size=15, weight='bold')).grid(row=0, column=0)
self.e1_str = StringVar()
self.e1 = Entry(self.root,bg = '#D2E48C',width = 10,textvariable = self.e1_str)
self.e1.grid(row = 1, column = 0)
self.v = IntVar()
self.Cb = Checkbutton(self.root,variable = self.v,text = 'Keyboard active',onvalue = 1,offvalue = 0,command = self.Keyeve)
self.Cb.grid(row = 3,column = 0)
self.currenttime = StringVar()
Label(self.root,textvariable = self.currenttime).grid(row=4, column=0,sticky = NW)
self.t_loop()
self.root.mainloop()
def buy(self,event):
print 'This is buy function.'
def sell(self,event):
print 'This is sell function.'
def rb(self):
self.root.bind('<KeyPress-b>',self.buy)
self.root.bind('<KeyPress-s>',self.sell)
def Keyeve(self):
if self.v.get():
self.rb()
else:
self.root.unbind('<KeyPress-b>')
self.root.unbind('<KeyPress-s>')
def t_loop(self):
self.currenttime.set(datetime.datetime.now().strftime("%Y-%m-%d,%H:%M:%S"))
self.root.after(1000,self.t_loop)
if __name__ == '__main__':
TradeSystem()
我輸入的條目self.e1
一些數字,而當keyboard active
爲'on'
,我按'b'
調用函數'buy'
,如:
和溫控功能'buy'
工作。
我只是想進入區分數字和當我按下'b'
後,我完成輸入號碼功能的「買入」被調用immediately.How我能做到這一點?
我建議使用修飾符,如Ctrl-B,而不是隻是B. – TigerhawkT3
這是工作。我正在做一個快速訂單系統,所以我想盡可能只使用一個鍵。 –
如果你真的不想使用'Ctrl-B',那麼你必須綁定函數到'Entry'中的''事件來檢查在條目中按下的所有按鍵。 –
furas