Python:引用Pmw RadioSelect中的单个标签

时间:2016-06-17 07:21:14

标签: python tkinter pmw

我想创建一个悬停框(或信息框),当用户将鼠标光标放在Pmw RadioSelect 标签的顶部时,它会打开。例如,当光标位于" Primary"之上时该程序打开一个信息框,解释什么"小学"装置

Pic 1, Pmw RadioSelect

问题:我不知道如何访问 RadioSelect对象中的各个标签。我需要将方法绑定到各个标签,但我不知道如何引用它们。

额外:我怎么能自己解决这个问题?我尝试用dir()查看RadioSelect属性,我在线阅读了Pmw手册,但无法找到相关信息。

编辑这是我到目前为止所发现的:manual表示只有明确设置其位置时标签才会开始存在:

  

labelpos

     

初始化选项。指定放置标签组件的位置。

     

如果,则不会创建标签组件。默认值为

明确设置之后,例如:

self.rs = Pmw.RadioSelect(parent, labelpos = 'w')

你可以参考它 self.rs.component('标签&#39)

但我仍然不知道如何达到个人标签。

编辑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")

1 个答案:

答案 0 :(得分:2)

如果我理解你的问题,我认为你在寻找:

  1. 依靠Pmw绘制小部件(不像我以前对Tkinter所做的那样)
  2. 当光标位于" Primary"之上时该程序打开一个信息框,解释什么"小学"意味着。(我在下面的演示中产生的效果)
  3. 识别单个支票按钮(或您在自己的条件下使用Pmw.RadioSelect内的个人标签进行调用)
  4. 解决方案:

    1. 您已经知道的第一个问题的解决方案。
    2. 对于第二个问题,正如我之前解释的那样,您需要实例化Pmw.Balloon()并将其绑定到各个检查按钮(或称为标签)。我重新编程,如下所示,但使用其他方法。我的意思是我主要依赖于add() 返回组件小部件。然后我将Pmw.Balloon()的实例绑定到add()返回的值。这样做,您已经为自己提供了一种单独访问支票按钮的方法(如果您愿意,可以使用此功能)
    3. 您可以使用getvalue()getcurselection()方法访问各个支票按钮(标签),方法类似,返回当前所选按钮的名称。 在实践中,你会得到元组(我的意思是这些函数返回所有选中的支票按钮的名称,正如我在access_to_labels_individually()中所示,我用作回调方法来显示名称您选择的支票按钮;当然您也可以根据需要使用它)
    4. 代码

      这是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()实例上相关的正在运行的程序的屏幕截图,无论它是否被选中:

      Checkbutton 1

      Checkbutton 2

      Checkbutton 3