【问题标题】:Tkinter button only works onceTkinter 按钮只能使用一次
【发布时间】:2019-06-10 23:22:14
【问题描述】:

Tkinter 按钮只运行一次单独的脚本

大家好,我是 python 和树莓派的新手,并且一直在寻找如何让 Tkinter 按钮在我的树莓派上多次运行脚本的方法。根据研究,我认为这与 name="ma​​in" 有关,但我无法弄清楚需要做什么以及为什么。我的按钮在生成 RF 信号的同一目录中运行一个单独的 python 文件(称为 SendRF.py),它第一次工作,但之后按钮单击没有任何其他作用。任何建议将不胜感激:)

from tkinter import *

#create a window
window =Tk()
window.title("Chappers Home Automation project")

#define a function
def test_function ():
    import SendRF

#create a button
B = Button(text ="Test Button 1", command=test_function)

B.pack(padx = 100, pady = 50)
window.mainloop()

没有错误信息出现。按钮在第一次按下时会发送射频信号,但在进一步点击按钮时没有任何反应。

【问题讨论】:

  • 这可能与您导入模块以可能运行副作用有关。为什么不在文件顶部导入一次,将所有副作用代码放在SendRF.py中的一个函数中,然后在回调中运行SendRF.send_signal()
  • 我认为@Carcigenicate 是对的。当您导入脚本时,它会被执行。但是,如果您尝试再次导入它,因为它已经被“导入”,它不会再次这样做。我猜 import 不是为了脚本,而是为了函数。我建议你把你的脚本作为一个定义,最后添加一个经典的 name if 语句如下: def x(): pass if name == ' main' : x() 这样,你的函数仍然可以作为脚本执行,但不会在导入期间执行。

标签: python-3.x tkinter raspberry-pi3


【解决方案1】:

您可以通过在函数中添加简单的打印语句来检查函数是否正常工作

from tkinter import *

#create a window
window =Tk()
window.title("Chappers Home Automation project")

#define a function
def test_function ():
    import SendRF
    print('CHECK') 

#create a button
B = Button(text ="Test Button 1", command=test_function)

B.pack(padx = 100, pady = 50)
window.mainloop()

【讨论】:

    【解决方案2】:

    您不能多次导入一个模块。同一模块的每个额外导入都是一个 NOP。您需要对 sendRF 中的任何内容进行函数化,并在 test_function 中调用该函数。

    【讨论】:

      【解决方案3】:

      一次可以用,因为你已经导入了SendRf函数,需要关闭,重新导入后

      【讨论】:

        猜你喜欢
        • 2020-04-05
        • 1970-01-01
        • 1970-01-01
        • 2017-12-21
        • 2021-11-24
        • 2014-02-22
        • 2023-03-26
        • 2022-07-09
        • 1970-01-01
        相关资源
        最近更新 更多