如何停止处理事件或切换为其调用的函数?
修订代码:
from Tkinter import *
class GUI:
def __init__(self,root):
Window = Frame(root)
self.DrawArea = Canvas(Window)
self.DrawArea.pack()
Window.pack()
self.DrawArea.bind("<Button 1>",self.starttracking)
def updatetracking(self,event):
print event.x,event.y
def finishtracking(self,event):
self.DrawArea.bind("<Button 1>",self.starttracking)
self.DrawArea.unbind("<Motion>")
def starttracking(self,event):
print event.x,event.y
self.DrawArea.bind("<Motion>",self.updatetracking)
self.DrawArea.bind("<Button 1>",self.finishtracking)
if __name__ == '__main__':
root = Tk()
App = GUI(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud) 我希望能够打开App GUI并让它自动将光标放入特定的文本小部件中.最佳情况是:一旦应用程序启动,有人可以开始输入而无需单击文本小部件.这只是一个显示问题的小例子:
from Tkinter import *
root = Tk()
Window = Frame(root)
TextWidget = Text(Window)
TextWidget.pack()
Window.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud) 如何将放大和缩小添加到以下脚本中,我想将其绑定到鼠标滚轮.如果您在linux上测试此脚本,请不要忘记将MouseWheel事件更改为Button-4和Button-5.
from Tkinter import *
import Image, ImageTk
class GUI:
def __init__(self,root):
frame = Frame(root, bd=2, relief=SUNKEN)
frame.grid_rowconfigure(0, weight=1)
frame.grid_columnconfigure(0, weight=1)
xscrollbar = Scrollbar(frame, orient=HORIZONTAL)
xscrollbar.grid(row=1, column=0, sticky=E+W)
yscrollbar = Scrollbar(frame)
yscrollbar.grid(row=0, column=1, sticky=N+S)
self.canvas = Canvas(frame, bd=0, xscrollcommand=xscrollbar.set, yscrollcommand=yscrollbar.set, xscrollincrement = 10, yscrollincrement = 10)
self.canvas.grid(row=0, column=0, sticky=N+S+E+W)
File = "PATH TO JPG PICTURE HERE"
self.img = ImageTk.PhotoImage(Image.open(File))
self.canvas.create_image(0,0,image=self.img, anchor="nw")
self.canvas.config(scrollregion=self.canvas.bbox(ALL))
xscrollbar.config(command=self.canvas.xview)
yscrollbar.config(command=self.canvas.yview)
frame.pack()
self.canvas.bind("<Button 3>",self.grab)
self.canvas.bind("<B3-Motion>",self.drag)
root.bind("<MouseWheel>",self.zoom)
def grab(self,event):
self._y = event.y
self._x = event.x
def drag(self,event):
if …
Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法以更紧凑的方式执行以下操作:
if (text == "Text1" or text=="Text2" or text=="Text3" or text=="Text4"):
do_something()
Run Code Online (Sandbox Code Playgroud)
问题是我在if语句中只有4个比较,它开始看起来很长,模糊和丑陋.有任何想法吗?
我正在尝试使画布上的jpeg可滚动,但似乎无法使滚动条正常工作。这是一些示例代码:
from Tkinter import *
import Image, ImageTk
root = Tk()
frame = Frame(root, bd=2, relief=SUNKEN)
frame.grid_rowconfigure(0, weight=1)
frame.grid_columnconfigure(0, weight=1)
xscrollbar = Scrollbar(frame, orient=HORIZONTAL)
xscrollbar.grid(row=1, column=0, sticky=E+W)
yscrollbar = Scrollbar(frame)
yscrollbar.grid(row=0, column=1, sticky=N+S)
canvas = Canvas(frame, bd=0, xscrollcommand=xscrollbar.set, yscrollcommand=yscrollbar.set)
canvas.grid(row=0, column=0, sticky=N+S+E+W)
File = "jpg filepath here"
img = ImageTk.PhotoImage(Image.open(File))
canvas.create_image(0,0,image=img, anchor="nw")
xscrollbar.config(command=canvas.xview)
yscrollbar.config(command=canvas.yview)
frame.pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud) 我无法获得工具提示与我总是在顶部窗口一起工作.显然问题是你不能在总是排在最前面的东西之上创造一些东西; 所以我想知道是否有解决方法或解决方案.Popup需要始终位于其他窗口之上,但我还需要正确显示所有工具提示.
这是我到目前为止的精简版:
from Tkinter import *
class GUI:
def __init__(self, root):
Popup = Toplevel(root)
Popup.resizable(0,0)
Popup.attributes("-toolwindow", 1)
Popup.wm_attributes("-topmost", 1)
PFrame = Frame(Popup)
self.B = Button(PFrame, width=10,height=10)
self.B.pack()
self.createToolTip(self.B,"Click this button.")
PFrame.pack()
class ToolTip(object):
def __init__(self, widget):
self.widget = widget
self.tipwindow = None
self.id = None
self.x = self.y = 0
def showtip(self, text):
self.text = text
if self.tipwindow or not self.text: return
x,y,cx,cy = self.widget.bbox("insert")
x = x + self.widget.winfo_rootx() +15
y = y + cy + self.widget.winfo_rooty() +65 …
Run Code Online (Sandbox Code Playgroud) 我知道模板可以像下面这样工作:
x = Template(" Coordinates; $o1;$o2;$o3;\n")
y = x.substitute(o1 = 23, o2 = 108, o3 = 655)
Run Code Online (Sandbox Code Playgroud)
你会给我:
" Coordinates; 23;108;655;\n"
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法逆转这个?像我打包的东西解压缩:
x = Template(" Coordinates; $o1;$o2;$o3;\n")
y = " Coordinates; 23;108;655;\n"
z = x.unpack(y)
Run Code Online (Sandbox Code Playgroud)
并让z返回类似的东西:
["23","108","655"]
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我应该使用正则表达式吗?
编辑:如果使用正则表达式,我将如何编程以下3行返回第一个数字和6个尾随数字?
a = " 123; Coord ; 19.1335; 3.5010; 1; 3; 8; 4"
b = " 17; Coord ; 15.2940; 13.5010; 3; 1; 8; 8"
c = " 5; Coord ; 19.1345; 0.6200; 1; 1; 7; 8"
Run Code Online (Sandbox Code Playgroud)
我尝试了这些,似乎无法让它工作:
>>> re.match('(\d+); Coord …
Run Code Online (Sandbox Code Playgroud) for pic,fn,xoff in [(self.PNew,self.New,0),(self.POpen,self.Open,0),(self.PSave,self.Save,0),(self.POrigin,self.SetOrigin,20),(self.PFiducial,self.SetFiducial,0),(self.PLine,self.AddLine,20),(self.PPoint,self.AddPoint,0),(self.PMove,self.AddMove,0),(self.PCircle,self.AddCircle,0),(self.PCall,self.AddCall,0)]: Button(ButtonRow,image=pic,command=fn).pack(side=LEFT,padx=(xoff,0))
Run Code Online (Sandbox Code Playgroud) 我希望使用输入键可以像使用工作表输入值时的Tab键一样运行.我不确定是否有足够的信息可以帮助我,所以如果不是,就提问.
输入 - 右后,我可以在工具>选项>编辑移动选择中找到设置.我想要相同的功能,但只适用于一个特定的工作表.