问题:我需要设置两个标志。如果单击了相应的操作按钮,则为“有效”标志和“测试”标志。 例如,如果单击“测试”按钮,则测试标志将为True,有效标志将为False。第二次,我再次单击“有效”按钮,然后有效标志应为True,测试标志应为False。不管一个按钮单击多少次,当前单击该按钮的标志均为True,第二个标志为False。因此,在任何时候,两个标志都不应该同时为True。
我无法实现这一目标。对于第一次单击每个按钮,结果均符合预期,但是第二次之后再次单击同一按钮,则效果不理想。
import tkinter
class intro:
def __init__(self, page1):
self.page1 = page1
self.btn = tkinter.Button(page1, text="next", command=self.me).grid(column=0, row=0)
self.btn2 = tkinter.Button(page1, text="message", command=lambda: staff(self.page1).new()).grid(column=1, row=0)
def me(self):
self.page2 = tkinter.Toplevel()
self.b = admin(self.page2)
self.page1.withdraw()
class admin:
def __init__(self, page2):
self.page2 = page2
self.btn = tkinter.Button(page2, text="next", command=self.me2).grid(column=0, row=0)
def me2(self):
self.page3 = tkinter.Toplevel()
self.b = staff(self.page3)
self.page2.withdraw()
class staff:
def __init__(self, page3):
self.page3 = page3
def new(self):
print("hello everybody")
if __name__ == '__main__':
window = tkinter.Tk()
app = intro(window)
window.mainloop()
答案 0 :(得分:2)
操作按钮的值是点击次数的计数,因此您必须存储它以确定是否再单击一次。
这里最简单的解决方案是让 2 observeEvents
(每个按钮一个),并以单击的按钮作为参数来调用函数:
library(shiny)
library(shinyWidgets)
shinyApp(
ui = basicPage(
actionBttn("valid", "Validate"),
actionBttn("test", 'Test')
),
server = function(input, output, session) {
my_function <- function(is_test) {
if (is_test)
print("Test clicked")
else
print("Validate clicked")
}
observeEvent(input$test, my_function(TRUE))
observeEvent(input$valid, my_function(FALSE))
}
)