【发布时间】:2019-08-03 13:59:49
【问题描述】:
我正在学习 Python,并已开始探索 tkInter 以开发简单的 GUI 示例。我目前的练习是开发一组按钮,它们充当代表离散输入的开关。我的问题是,当按下按钮后调用pin_state_change 时,我无法知道按下了哪个按钮?
一旦我知道按下了哪个按钮,我就可以更改正确的 GPIO 状态。
经过大量谷歌搜索后,我在 tkInter 中遇到了 IntVar() 方法,并使用 get() 调用我应该能够获取按下按钮的 ID,但这不起作用 - print(var.get()) 总是打印0 在控制台上,无论我按哪个按钮。
from gpio_pin import gpio_pin_type
import tkinter as tk
gpio_pins_rb = []
root = tk.Tk()
root.withdraw()
var = tk.IntVar()
window = tk.Tk()
def pin_state_change():
print(var.get())
def create_gui():
window.title("GPIO V1 GUI")
for radbut in range(0, 5):
tk.Radiobutton(window, text ="GPIO " + str(radbut),value = "GPIO " + str(radbut), bg = "red", indicatoron = False, command = pin_state_change).grid(row = 5, column = radbut)
window.mainloop()
def initialise_system(no_of_gpios):
gpio_pins = []
for pin in range (0, no_of_gpios):
gpio_pins.append(gpio_pin_type(pin, "discrete"))
gpio_pins[pin].set(1)
#print(gpio_pins[pin].get(), end =" ")
return gpio_pins
def main():
gpins = initialise_system(5)
print(gpins[1].get())
create_gui()
if __name__== "__main__":
main()
【问题讨论】:
-
您的
var仍然为 0,因为您的代码中绝对没有任何东西会改变它。您需要将variable=var传递给您的每个单选按钮,以将它们连接到特定的变量。您还需要使用兼容类型 - 要么将value=选项更改为 int,要么使用StringVar。