Обновление кнопки из одной функции в другой с помощью tkinter - PullRequest
0 голосов
/ 05 августа 2020

Я хочу обновить кнопку в моем коде, запустив функцию позже в коде, которая ссылается на предыдущую функцию, а затем обновить эту кнопку новым текстом. Когда я запускаю этот код, он указывает, что Source1 не определен, когда функция okay 3 запускает оператор if. Новичок в программировании и ищу советы. Спасибо

from tkinter import *

import pandas as pd

##database = pd.ExcelFile('C:/Code/CODETEST.xlsx').parse(1)

excel_data_df = pd.read_excel('CODETEST.xlsx', sheet_name='Sheet1')

print(excel_data_df)

print(excel_data_df.columns.ravel())

##print(excel_data_df['Service Name'].tolist())


My_Service_List = (excel_data_df['Service Name'].tolist())

print(My_Service_List)

##Source1_Text = tk.StringVar()

root = Tk()

##Creating Entries
Group = Entry(root, width=50)
Group.grid(row=0, column=5)
Source = Entry(root, width=50)
Source.grid(row=1, column=5)
Service = Entry(root, width=50)
Service.grid(row=2, column=5)

global Source1
global Standard_window

def Standard_flow():
    ##global Source1_Text
    Standard_window = Tk()
    ##Source1_Text = tk.StringVar()
    ##Source1_Text.set("Original Text")
    Source1 = Button(Standard_window, text=My_Service_List[1])
    Source1.grid(row=1, column=1)
    Source2 = Button(Standard_window, text='HDA')
    Source2.grid(row=1, column=2)
    Source3 = Button(Standard_window, text='Router')
    Source3.grid(row=1, column=3)


# Definining Buttons
def Okay():
    hello = "Searching " + Group.get()
    myLabel = Label(root, text=hello)
    myLabel.grid(row=0, column=6)


def Okay2():
    hello2 = "Searching " + Source.get()
    myLabel2 = Label(root, text=hello2)
    myLabel2.grid(row=1, column=6)


def Okay3():
    hello3 = "Searching " + Service.get()
    myLabel3 = Label(root, text=hello3)
    myLabel3.grid(row=2, column=6)
    if My_Service_List.__contains__(Service.get()):
        Source1.config(text=My_Service_List[3])
        return Standard_flow()
    else:
        None


##Creating Buttons
myButton_Group = Button(root, text='Group Multicast IP', command=Okay)
myButton_Source = Button(root, text='Source IP', command=Okay2)
myButton_Service = Button(root, text='Service Name', command=Okay3)

##Displaying Buttons
myButton_Group.grid(row=0, column=1)
myButton_Source.grid(row=1, column=1)
myButton_Service.grid(row=2, column=1)

root.mainloop()

1 Ответ

1 голос
/ 06 августа 2020

Проблема в том, что ваша Source1 является локальной переменной и, следовательно, доступна только той функции, для которой вы ее определили, то есть Standard_flow(). Чтобы сделать это глобальным и исправить ошибку, просто попробуйте сказать следующее:

def Standard_flow():
    global Source1
    Standard_window = Tk()
    ......

С этим изменением ошибка должна быть go, и она должна работать. И просто сохраните этот global Source1 и удалите все остальные global Source1 в своем коде (я имею в виду тот, который находится вне функции)

Сообщите мне, если ошибка не исчезнет

Ура

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...