我用GUI制造商pygubu创建了一个窗口。该窗口包含复选框。但我的脚本无法识别是否标记了复选框。 如何检查复选框是否已标记? 我是否要使用命令或变量?什么是正确的语法?
下面你可以看到我在pygubu中做了什么。如何获取复选框的状态? http://i.stack.imgur.com/W9o5A.jpg
我试过了:
def checker13(self, variable=check13):
self.variable13 = variable
print self.variable13
这应该在每次更改时打印出复选框的状态。但我总是收到一个错误。我该怎么办?
答案 0 :(得分:0)
根据此处的示例http://www.python-course.eu/tkinter_checkboxes.php
from tkinter import *
master = Tk()
var1 = IntVar()
Checkbutton(master, text="male", variable=var1).grid(row=0, sticky=W)
var2 = IntVar()
Checkbutton(master, text="female", variable=var2).grid(row=1, sticky=W)
mainloop()
您需要设置一个存储复选框结果的变量,然后引用它(在本例中它是var1和var2)。
编辑:更具体地回答你的问题;您可以查看var1
和var2
的结果,因为它们将等于0
未选中或1
进行检查。希望这会有所帮助。
答案 1 :(得分:0)
感谢您澄清您的问题。现在我知道你正在使用Pygubu构建你的GUI,我可以再多看一下。我发现以下文档页面可以帮助解决您的问题: http://infohost.nmt.edu/tcc/help/pubs/tkinter/web/ttk-Checkbutton.html
要注意的关键Checkbutton选项是variable
选项。在您提供的图片中,您似乎尝试将variable
选项设置为var
。上面的文档说明了variable
选项:
跟踪检查按钮当前状态的控制变量...... 通常,您将在此处使用IntVar,并且off和on值为0 和1,分别。
您是否可以选择将variable
选项更改为IntVar
,而不是图片中当前的int
?如果没有,那应该仍然没问题。
因此,变量var
将存储Checkbutton的状态。在您提供的图片中,您将command
选项设置为checker13
。保持这样。现在,由于我从未使用过Pygubu(甚至Tkinter),我无法确定此代码是否可行,但尝试这样的事情:
def checker13(self):
print(self.var)
如果这不起作用,请尝试:
def checker13(self):
print(self.variable)
如果其中一个有效,请告诉我,以便我可以使用工作代码编辑我的答案。如果您仍然卡住了,请告诉我。
答案 2 :(得分:0)
最后,我找到了一种不太优雅的方式。它不是很漂亮"但它确实有效:
android:layout_weight
通常情况下,未标记复选框,值为EditText
。如果复选框被标记,则会有一个事件,并且值会更改为self.xxx1 = 0
def checker13(self):
if self.xxx1 == 0:
self.xxx1 = self.xxx1+1
else:
self.xxx1 = 0
。下一个事件会将值更改回0
。通过这种方法,我可以通过选中1
来检查复选框的状态。
我知道还有其他方法(使用0
),但我专门用pygubu搜索解决方案。如果答案更顺利,请随时纠正我。
编辑: 从pygubu中获取变量的值:
xxx1
答案 3 :(得分:0)
我刚遇到这个问题。以下是处理复选框的简化解决方案。
checkbox_example.py内容:
import tkinter as tk
import pygubu
class App:
def __init__(self, master):
self.master = master
self.builder = builder = pygubu.Builder() # Create builder
builder.add_from_file('checkbox_example.ui') # Load ui file.
# Create widget using master as parent
self.mainwindow = builder.get_object('mainwindow', master)
builder.connect_callbacks(self) # Connect callbacks
# Create check button object
self.check_button_object = builder.get_object('cb0', self.mainwindow)
def on_checkbox_clicked(self):
print("on_checkbox_clicked")
checked = self.builder.get_variable('checked') # Get variable
print(checked.get()) # get value of checked and print it
if __name__ == '__main__':
root = tk,Tk()
app = App(root)
root.mainloop()
,checkbox_example.ui的内容为:
<?xml version='1.0' encoding='utf-8'?>
<interface>
<object class="tk.Frame" id="mainwindow">
<property name="height">200</property>
<property name="width">200</property>
<layout>
<property name="column">0</property>
<property name="propagate">True</property>
<property name="row">0</property>
<property name="sticky">nw</property>
</layout>
<child>
<object class="tk.Checkbutton" id="cb0">
<property name="command">on_checkbox_clicked</property>
<property name="cursor">arrow</property>
<property name="font">TkDefaultFont</property>
<property name="offvalue">0</property>
<property name="onvalue">1</property>
<property name="pady">0</property>
<property name="text" translatable="yes">checkbox_string</property>
<property name="underline">0</property>
<property name="variable">int:checked</property>
<layout>
<property name="column">0</property>
<property name="propagate">True</property>
<property name="row">1</property>
</layout>
</object>
</child>
</object>
</interface>
要查看它已执行,我已经创建了一个简短的YouTube视频片段: https://youtu.be/Y6lpi3oihOo