Python: 引用 Pmw RadioSelect 中的单个标签
Python: Referring to single labels in a Pmw RadioSelect
我想创建一个悬停框(或信息框),当用户将鼠标光标放在 Pmw RadioSelect 标签 上时,它会打开。例如,当光标放在“Primary”上方时,程序会打开一个信息框,解释“Primary”的含义。
问题:我不知道如何访问 RadioSelect 对象内部的各个标签。我需要为各个标签绑定一个方法,但我不知道如何引用它们。
额外:我怎么能自己解决这个问题?我尝试使用 dir() 查看 RadioSelect 属性,并在线阅读了 Pmw 手册,但找不到相关信息。
EDIT 这是我到目前为止发现的: manual 说标签只有在明确设置位置后才开始存在:
labelpos
Initialisation option. Specifies where to place the label component.
If None, a label component is not created. The default is None
明确设置后,例如:
self.rs = Pmw.RadioSelect(parent, labelpos = 'w')
你可以参考它
self.rs.component('label')
但我仍然不知道如何访问各个标签。
编辑 2: 诀窍只是将 RadioSelect“项目”分配给变量,就像接受的答案所建议的那样:
self.cb1 = self.radio_select.add("text")
将“项目”分配给变量后,您可以简单地将方法绑定到变量,如下所示:
self.balloon = Pmw.Balloon(self, initwait=500, relmouse='both')
self.balloon.bind(self.cb1, "Balloon text example")
如果我很了解你的问题,我想你正在寻找:
- 依靠 Pmw 来绘制小部件(与我之前使用 Tkinter 所做的不同)
- 当光标放在 "Primary" 之上时,程序会打开一个信息框,解释 "Primary" 的含义。(我在下面演示)
- 识别单个复选按钮(或者您用自己的术语称呼达到
Pmw.RadioSelect
中的 单个标签)
解决方案:
- 您已经知道的第一个问题的解决方案。
- 对于第二个问题,正如我之前解释的那样,您需要实例化
Pmw.Balloon()
并将其绑定到各个复选按钮(或您所说的 标签 )。我 re-programmed 正如您在下面看到的那样,但使用的是另一种方法。我的意思是我主要依赖 add()
,其中 return 是组件小部件。 然后我将 Pmw.Balloon()
的实例绑定到 return从 add()
编辑值。这样做,你已经为自己提供了一种单独访问复选按钮的方法(如果你愿意,你可以玩更多)
- 您可以使用
getvalue()
or getcurselection()
方法访问单个复选按钮 ( 标签 ),其工作方式与 return 输入 return 名称类似当前 selected 按钮。 但是在实践中,你会得到元组(我的意思是这些函数 return 所有 selected checkbuttons 的名称,正如我在 access_to_labels_individually()
我用作回调方法来显示您 select 的复选按钮的名称;当然您也可以根据需要使用它)
代码
这是一个MVCE程序:
'''
Created on Jun 18, 2016
@author: Billal BEGUERADJ
'''
# -*- coding: utf-8 -*-
import Pmw
import tkinter as tk
class Begueradj:
def __init__(self, parent):
self.balloon = Pmw.Balloon(parent)
# Create and pack a vertical RadioSelect widget, with checkbuttons.
self.checkbuttons = Pmw.RadioSelect(parent,
buttontype = 'checkbutton',
orient = 'vertical',
labelpos = 'w',
command = self.access_to_labels_individually,
hull_borderwidth = 2,
hull_relief = 'ridge',
)
self.checkbuttons.pack(side = 'left', expand = 1, padx = 10, pady = 10)
# Add some buttons to the checkbutton RadioSelect
self.cb1 = self.checkbuttons.add('Primary')
self.cb2 = self.checkbuttons.add('Secondary')
self.cb3 = self.checkbuttons.add('Tertiary')
# Bind the Balloon instance to each widget
self.balloon.bind(self.cb1, 'Primary:\n This is our primary service')
self.balloon.bind(self.cb2, 'Secondary:\n This is our primary service')
self.balloon.bind(self.cb3, 'Tertiary:\n This is our primary service')
# You can use getvalue() or getcurselection() to access individual labels
def access_to_labels_individually(self, tag, state):
print(self.checkbuttons.getvalue())
# Main program starts here
if __name__ =='__main__':
begueradj = Pmw.initialise(fontScheme = 'pmw1')
begueradj.title('Billal BEGUERADJ')
d = Begueradj(begueradj)
begueradj.mainloop()
演示
(我保留了相同的屏幕截图,因为上面的程序产生了相同的结果)
以下是与鼠标悬停在每个 tkinter.Checkbutton()
实例上相关的 运行 程序的屏幕截图,无论它是否被 select 编辑:
我想创建一个悬停框(或信息框),当用户将鼠标光标放在 Pmw RadioSelect 标签 上时,它会打开。例如,当光标放在“Primary”上方时,程序会打开一个信息框,解释“Primary”的含义。
问题:我不知道如何访问 RadioSelect 对象内部的各个标签。我需要为各个标签绑定一个方法,但我不知道如何引用它们。
额外:我怎么能自己解决这个问题?我尝试使用 dir() 查看 RadioSelect 属性,并在线阅读了 Pmw 手册,但找不到相关信息。
EDIT 这是我到目前为止发现的: manual 说标签只有在明确设置位置后才开始存在:
labelpos
Initialisation option. Specifies where to place the label component.
If None, a label component is not created. The default is None
明确设置后,例如:
self.rs = Pmw.RadioSelect(parent, labelpos = 'w')
你可以参考它 self.rs.component('label')
但我仍然不知道如何访问各个标签。
编辑 2: 诀窍只是将 RadioSelect“项目”分配给变量,就像接受的答案所建议的那样:
self.cb1 = self.radio_select.add("text")
将“项目”分配给变量后,您可以简单地将方法绑定到变量,如下所示:
self.balloon = Pmw.Balloon(self, initwait=500, relmouse='both')
self.balloon.bind(self.cb1, "Balloon text example")
如果我很了解你的问题,我想你正在寻找:
- 依靠 Pmw 来绘制小部件(与我之前使用 Tkinter 所做的不同)
- 当光标放在 "Primary" 之上时,程序会打开一个信息框,解释 "Primary" 的含义。(我在下面演示)
- 识别单个复选按钮(或者您用自己的术语称呼达到
Pmw.RadioSelect
中的 单个标签)
解决方案:
- 您已经知道的第一个问题的解决方案。
- 对于第二个问题,正如我之前解释的那样,您需要实例化
Pmw.Balloon()
并将其绑定到各个复选按钮(或您所说的 标签 )。我 re-programmed 正如您在下面看到的那样,但使用的是另一种方法。我的意思是我主要依赖add()
,其中 return 是组件小部件。 然后我将Pmw.Balloon()
的实例绑定到 return从add()
编辑值。这样做,你已经为自己提供了一种单独访问复选按钮的方法(如果你愿意,你可以玩更多) - 您可以使用
getvalue()
orgetcurselection()
方法访问单个复选按钮 ( 标签 ),其工作方式与 return 输入 return 名称类似当前 selected 按钮。 但是在实践中,你会得到元组(我的意思是这些函数 return 所有 selected checkbuttons 的名称,正如我在access_to_labels_individually()
我用作回调方法来显示您 select 的复选按钮的名称;当然您也可以根据需要使用它)
代码
这是一个MVCE程序:
'''
Created on Jun 18, 2016
@author: Billal BEGUERADJ
'''
# -*- coding: utf-8 -*-
import Pmw
import tkinter as tk
class Begueradj:
def __init__(self, parent):
self.balloon = Pmw.Balloon(parent)
# Create and pack a vertical RadioSelect widget, with checkbuttons.
self.checkbuttons = Pmw.RadioSelect(parent,
buttontype = 'checkbutton',
orient = 'vertical',
labelpos = 'w',
command = self.access_to_labels_individually,
hull_borderwidth = 2,
hull_relief = 'ridge',
)
self.checkbuttons.pack(side = 'left', expand = 1, padx = 10, pady = 10)
# Add some buttons to the checkbutton RadioSelect
self.cb1 = self.checkbuttons.add('Primary')
self.cb2 = self.checkbuttons.add('Secondary')
self.cb3 = self.checkbuttons.add('Tertiary')
# Bind the Balloon instance to each widget
self.balloon.bind(self.cb1, 'Primary:\n This is our primary service')
self.balloon.bind(self.cb2, 'Secondary:\n This is our primary service')
self.balloon.bind(self.cb3, 'Tertiary:\n This is our primary service')
# You can use getvalue() or getcurselection() to access individual labels
def access_to_labels_individually(self, tag, state):
print(self.checkbuttons.getvalue())
# Main program starts here
if __name__ =='__main__':
begueradj = Pmw.initialise(fontScheme = 'pmw1')
begueradj.title('Billal BEGUERADJ')
d = Begueradj(begueradj)
begueradj.mainloop()
演示
(我保留了相同的屏幕截图,因为上面的程序产生了相同的结果)
以下是与鼠标悬停在每个 tkinter.Checkbutton()
实例上相关的 运行 程序的屏幕截图,无论它是否被 select 编辑: