목록 상자에서 선택한 항목의 변경 또는 선택한 라디오 버튼의 변경 항목에 의해 트리거되는 이벤트를 만들고 싶습니다. 가능한가? 이 코드를 사용합니다 :목록 상자 및 파이썬 Tkinter의 라디오 버튼에 의해 트리거되는 이벤트
def getScript(event):
state = rb.get()
listScript = []
processor =()
processor = lb1.get(lb1.curselection())
if processor :
if (state == 1):
print processor
if (state == 2):
pass
if (state == 3):
pass
frame2 = Frame(top)
frame2.pack(fill = X)
rb = IntVar()
R1 = Radiobutton(frame2, text = "Parallel Test",
variable = rb, value = 1, command = getScript)
R2 = Radiobutton(frame2, text = "Non Parallel Test",
variable = rb, value = 2, command = getScript)
R3 = Radiobutton(frame2, text = "Specific Test",
variable = rb, value = 3, command = getScript)
R1.grid(row = 0, column = 0, padx = 10)
R2.grid(row = 0, column = 1, padx = 10)
R3.grid(row = 0, column = 2, padx = 10)
frame3 = Frame(top)
frame3.pack(fill = X)
space_frame3 = Frame(frame3, width = 10)
l5 = Label(frame3, text = "Processor Unit")
l6 = Label(frame3, text = "Script for test")
lb1 = Listbox(frame3, height = 7, exportselection = 0)
lb1.bind('<<ListboxSelect>>',getScript)
scrollbar = Scrollbar(frame3)
lb2 = Listbox(frame3, height = 7, width = 40,
yscrollcommand = scrollbar.set, exportselection = 0)
목록 상자에서 항목을 선택하기 전에 라디오 버튼을 선택하면 모든 것이 잘됩니다. 하지만 또 다른 라디오 버튼을 선택 때마다, 그것은 반환 : 당신이 라디오 버튼이 선택하면
TypeError: getScript() takes exactly 1 argument (0 given)
첫 번째 해결책은 저에게 잘 돌아갑니다. 두 번째 솔루션을 사용하면 getScript 함수에 'event'인수를 추가 할 필요가 없다는 의미입니까? 함수에 대한 목록 상자의 바인딩을 변경합니까? 함수 인수에 이벤트를 추가 할 필요가없는 경우 이벤트에서 함수를 트리거하는 것이 가능한지 궁금합니다. 미리 감사드립니다. – ferryard
호출 된 함수가 마우스 위치와 같은 이벤트 매개 변수에 의존하지 않으면 이벤트를 제공하지 않고 이벤트에서 함수를 호출 할 수 있습니다. 예를 들어 함수에'None'을 넘겨 주면 이벤트가 없다는 것을 알 수 있습니다 ... 그래서 함수의 인자로 필요없이 이벤트에 함수를 호출하고 있습니다.). 두 번째 제안은 rb에 대한 전역 호출없이 어떤 위젯이 선택되었는지 알 수 있습니다. rb 값을 사용하여 작동하는 인수없이 호출 된 함수를 상상할 수 있습니다. 'event' 매개 변수 만 제거하면됩니다. –