zvi*_*zvi 6 python tk-toolkit tkinter right-to-left tkinter.checkbutton
我有一个复选按钮:
from tkinter import *
master = Tk()
Checkbutton(master, text="Here...").grid(row=0, sticky=W)
mainloop()
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
我尝试将复选按钮移到另一侧(以支持 RTL 语言),所以它会像:
Here...[]
我知道我可以在复选按钮旁边绘制一个标签,但这样单击文本不会影响复选按钮。
我该怎么做?
您可以将 label 的鼠标左键单击事件绑定到切换复选按钮的 lambda 构造:
label.bind("<Button-1>", lambda x : check_button.toggle())
Run Code Online (Sandbox Code Playgroud)
然后可以使用网格将标签放置在复选按钮之前(如最后的OP中所述)-:
from tkinter import *
master = Tk()
l1 = Label(master, text = "Here...")
cb = Checkbutton(master)
l1.grid(row = 0, column = 0)
cb.grid(row = 0, column = 1, sticky=W)
l1.bind("<Button-1>", lambda x : cb.toggle())
mainloop()
Run Code Online (Sandbox Code Playgroud)
即使单击标签,这也会切换复选按钮。
输出-:
笔记:
checkbutton 现在必须作为 object( cb) 获取,以便在标签的绑定函数回调参数的 lambda 构造中使用。因此,它在下一行中被网格化。单独管理几何图形通常是一种很好的做法,这可以防止出现此类错误。
另外,正如@Alexander B.在评论中链接的帖子中提到的,如果要多次使用此程序集,它也可以制作成一个继承自该类的自己的类-:tkinter.Frame
class LabeledCheckbutton(Frame):
def __init__(self, root, text = ""):
Frame.__init__(self, root)
self.checkbutton = Checkbutton(self)
self.label = Label(self, text = text)
self.label.grid(row = 0, column = 0)
self.checkbutton.grid(row = 0, column = 1)
self.label.bind('<Button-1>', lambda x : self.checkbutton.toggle())
return
pass
Run Code Online (Sandbox Code Playgroud)
将其与网格一起用作几何管理器,将使完整代码如下所示 -:
from tkinter import *
class LabeledCheckbutton(Frame):
def __init__(self, root, text = ""):
Frame.__init__(self, root)
self.checkbutton = Checkbutton(self)
self.label = Label(self, text = text)
self.label.grid(row = 0, column = 0)
self.checkbutton.grid(row = 0, column = 1)
self.label.bind('<Button-1>', lambda x : self.checkbutton.toggle())
return
pass
master = Tk()
lcb = LabeledCheckbutton(master, text = "Here...")
lcb.grid(row = 0, sticky = W)
mainloop()
Run Code Online (Sandbox Code Playgroud)
上述代码的输出与第一种方法的输出保持一致。唯一的区别是它现在更容易扩展,因为可以在需要时创建对象,并且不需要每次都重复相同的代码行。
| 归档时间: |
|
| 查看次数: |
330 次 |
| 最近记录: |