使用闪亮反应

时间:2020-06-23 16:48:25

标签: r shiny reactive

问题:我需要设置两个标志。如果单击了相应的操作按钮,则为“有效”标志和“测试”标志。 例如,如果单击“测试”按钮,则测试标志将为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()

1 个答案:

答案 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))
    }
)