Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Mac OS X中的绑定密钥-Tkinter_Python_Macos_Tkinter_Tk_Key Bindings - Fatal编程技术网

Python Mac OS X中的绑定密钥-Tkinter

Python Mac OS X中的绑定密钥-Tkinter,python,macos,tkinter,tk,key-bindings,Python,Macos,Tkinter,Tk,Key Bindings,我有一个在Ubuntu系统中运行完美的代码。这只是一个基于它的最小代码: import tkinter as Tk import tkFileDialog import ttk class AppGUI(Tk.Frame): def __init__(self, parent): self.ctrl = False self.parent = parent self.centerWindow() self.init

我有一个在Ubuntu系统中运行完美的代码。这只是一个基于它的最小代码:

import tkinter as Tk
import tkFileDialog 
import ttk

class AppGUI(Tk.Frame):

    def __init__(self, parent):  
        self.ctrl = False
        self.parent = parent
        self.centerWindow()
        self.initGUI()
        self.plot()

    def initGUI(self):
        # Notebooks
        self.notebook  = ttk.Notebook(self.parent)
        self.frame_one = Tk.Frame(self.notebook)   # first page
        self.frame_two = Tk.Frame(self.notebook)   # second page
        self.notebook.add(self.frame_one, text='Notebook 1')
        self.notebook.add(self.frame_two, text='Notebook 2')
        self.notebook.pack(side = Tk.TOP, fill="both", expand=True)

        # Realization frame
        self.out_frame = Tk.Frame(self.parent, bd=1, relief=Tk.SUNKEN)
        self.out_frame.pack(side=Tk.TOP, fill="both", expand=True)

        # Key events
        self.key()

    def centerWindow(self):
        w = 800
        h = 800

        sw = self.parent.winfo_screenwidth()
        sh = self.parent.winfo_screenheight()

        x = (sw - w)/2
        y = (sh - h)/2
        self.parent.geometry('%dx%d+%d+%d' % (w, h, x, y))


    def key(self):
        # Key events
        def press(event):
            self.ctrl = True
        def release(event):
            self.ctrl = False

        self.parent.bind('<Control_L>', press)
        self.parent.bind('<KeyRelease-Control_L>', release)

    def plot1(self):
        f = plt.figure(figsize=(1, 1), dpi=300)
        c_plot1 = FigureCanvasTkAgg(f, master=self.frame_one)
        c_plot1.show()
        c_plot1.pack(side=Tk.LEFT, fill="both", expand=True)

        def onClickPlot1(event):
            if event.inaxes is not None:
                if self.ctrl:
                    print "Control key pressed"
                    # Do my stuff

        c_plot1.mpl_connect('button_press_event', onClickPlot1)

    def plot2(self):
        # Same stuff for plot 2

    def plot(self):
        self.plot1()
        self.plot2()


def main():
    root = Tk.Tk()
    app = AppGUI(root)
    root.mainloop()  


if __name__ == '__main__':
    main()
将tkinter作为Tk导入
导入tkFileDialog
导入ttk
类AppGUI(Tk.Frame):
定义初始化(自身,父级):
self.ctrl=False
self.parent=parent
self.centerWindow()
self.initGUI()
self.plot()
def initGUI(self):
#笔记本
self.notebook=ttk.notebook(self.parent)
self.frame_one=Tk.frame(self.notebook)#首页
self.frame_two=Tk.frame(self.notebook)#第二页
self.notebook.add(self.frame\u one,text='notebook 1')
self.notebook.add(self.frame\u two,text='notebook 2')
self.notebook.pack(side=Tk.TOP,fill=“both”,expand=True)
#实现框架
self.out\u frame=Tk.frame(self.parent,bd=1,relieve=Tk.SUNKEN)
self.out\u frame.pack(side=Tk.TOP,fill=“both”,expand=True)
#关键事件
self.key()
def中心窗口(自):
w=800
h=800
sw=self.parent.winfo_screenwidth()
sh=self.parent.winfo_屏幕高度()
x=(西南-西南)/2
y=(sh-h)/2
self.parent.geometry(“%dx%d+%d+%d%”(w,h,x,y))
def键(自):
#关键事件
def压力(事件):
self.ctrl=True
def释放(事件):
self.ctrl=False
self.parent.bind(“”,按)
self.parent.bind(“”,release)
def plot1(自):
f=plt.图(figsize=(1,1),dpi=300)
c_plot1=图CAVASTKAGG(f,master=self.frame_one)
c_plot1.show()
c_plot1.pack(side=Tk.LEFT,fill=“both”,expand=True)
def onClickPlot1(事件):
如果event.inaxes不是None:
如果self.ctrl:
打印“按下控制键”
#做我的事
c_plot1.mpl_connect(“按钮按下事件”,单击plot1)
def plot2(自):
#情节2也一样
def绘图(自):
self.plot1()
self.plot2()
def main():
root=Tk.Tk()
app=AppGUI(根目录)
root.mainloop()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
当我在Ubuntu机器上运行精简版时,我可以看到我按下的任何
Control
键(left或right Control)都已正确装订,因为我看到了打印和预期的视觉效果。另一方面,在Mac中运行相同的代码,我看不到打印输出,当然,预期的结果不会发生

我按照文档执行绑定。我没有尝试使用Mac
命令
键,只是使用常规的左
控件


不同系统是否有不同的投标代码?这没有道理,但我找不到问题。

有三种不同类型的键:

  • 普通键;例如:s、a、1、9和

  • 标点键;例如“左”、“上”、“括号右”(“]”), ! , % 而且

  • 特殊钥匙;例如:

    • 'Meta_L'(mac中的命令)
    • 'Alt_L'(mac中的Alt)
    • 控制(在mac中按ctrl键)
    • 'super_L'(mac中的fn)
    • 'Shift\u L(mac中的移位)
    • 'Caps\u Lock'
    • 以及fn+F2等组合键都是标点键。
  • #使用Tkinter绑定并显示按键事件
    从tkinter进口*
    root=Tk()
    提示符='按任意键'
    label1=Label(根,text=prompt,width=len(prompt),bg='yellow')
    标签1.pack()
    def键(事件):
    如果event.char==event.keysym:
    msg='正常键%r'%event.char
    elif len(event.char)==1:
    msg='标点符号键%r(%r)'(event.keysym,event.char)
    其他:
    msg='特殊键%r'%event.keysym
    label1.config(text=msg)
    root.bind_all(“”,键)
    root.mainloop()
    

    上面的代码说明了一切;)

    有三种不同类型的键:

  • 普通键;例如:s、a、1、9和

  • 标点键;例如“左”、“上”、“括号右”(“]”), ! , % 而且

  • 特殊钥匙;例如:

    • 'Meta_L'(mac中的命令)
    • 'Alt_L'(mac中的Alt)
    • 控制(在mac中按ctrl键)
    • 'super_L'(mac中的fn)
    • 'Shift\u L(mac中的移位)
    • 'Caps\u Lock'
    • 以及fn+F2等组合键都是标点键。
  • #使用Tkinter绑定并显示按键事件
    从tkinter进口*
    root=Tk()
    提示符='按任意键'
    label1=Label(根,text=prompt,width=len(prompt),bg='yellow')
    标签1.pack()
    def键(事件):
    如果event.char==event.keysym:
    msg='正常键%r'%event.char
    elif len(event.char)==1:
    msg='标点符号键%r(%r)'(event.keysym,event.char)
    其他:
    msg='特殊键%r'%event.keysym
    label1.config(text=msg)
    root.bind_all(“”,键)
    root.mainloop()
    

    上面的代码说明了一切;)

    绑定
    打印()
    当您按下
    控件时,在
    事件
    中得到的所有内容,您将看到得到的内容-可能它使用不同的代码(即
    元代码
    )。请参阅:绑定
    打印()
    当您按下
    Control
    时,您在
    事件
    中得到的所有信息,您将看到您得到的信息-可能它使用了不同的代码(即
    元代码)。请参阅:非常有帮助。但我要改变一点:Alt_L(mac中的选项键)非常有用。但我要改变一个要点:Alt_L(mac中的选项键)