Итак, у меня есть код, который будет читать в файле json из метода.Что я хочу сделать, так этоЭтот метод вызывается при открытии программы.И вызывается снова, когда пользователь нажимает кнопку, которая отправляет запрос json серверу, а затем изменяет базу данных там.Теперь, когда пользователь нажимает кнопку, я хочу обновить значения, которые находятся внутри виджетов со списком и прокруткой текста.Я просто могу сделать это правильно.Он либо ничего не делает, либо добавляет дополнительные элементы внизу.
Я хотел бы очистить текст прокрутки и значение поля со списком и переписать их в новый файл Json.
Что у меня так далеко.
from tkinter import *
from tkinter.ttk import *
from tkinter import scrolledtext
from tkinter import messagebox
# AI devices imports
from SmartAdFSM import ADControlSystem as aic
from SmartAdFSM.AdUtility import AdHelperMethods as adm
# Varialbes that are collected from differnt APIs
# TODO:Replace with real ads from Google/Yahoo/Facebook
# TODO: Create method to gather all avalialbe ads from service providers and create
# 1: list of all ads form API, '(Yahoo, Google, Facebook)
# 2: FSM for all ads
# List for ads
# They are broken up first by service provider then added into a master list
currentAds = [] # This holds every add from every service provider.
apiYahooAds = [] # This holds every yahoo add
jsonFile = "TestAds/YahooAd.json"
# Get the initial setup and read the new info from Yahoo API
adm.CreateYahooAdList(jsonFile, apiYahooAds, currentAds)
# Add ad values into the list for dropdown and fsm
# Initial set up of the UI
ddMenuValues = [] # names of each ad
adTitles = [] # The FSM for each ad
def activateClicked():
target = dropdownWidget.get()
msg = "{} Ad is now active".format(target)
for targetAd in currentAds:
if target == targetAd.title:
aic.controlFSM(targetAd, "activate")
messagebox.showinfo('Action', msg)
# collect the updated API from yahoo API to update the UI
adm.CreateYahooAdList(jsonFile, apiYahooAds, currentAds)
adm.UpdateUI(adTitleViewWidget,dropdownWidget,adTitles,ddMenuValues,currentAds)
break
def deactivateClicked():
target = dropdownWidget.get()
msg = "{} Ad in now inactive".format(target)
for targetAd in currentAds:
if target == targetAd.title:
aic.controlFSM(targetAd, "pause")
messagebox.showinfo('Action', msg)
# collect the updated API from yahoo API to update the UI
adm.CreateYahooAdList(jsonFile, apiYahooAds, currentAds)
break
def endClicked():
target = dropdownWidget.get()
msg = "{} Ad in now ended".format(target)
for targetAd in currentAds:
if target == targetAd.title:
aic.controlFSM(targetAd, "delete")
messagebox.showinfo('Action', msg)
# collect the updated API from yahoo API to update the UI
adm.CreateYahooAdList(jsonFile, apiYahooAds, currentAds)
break
window = Tk()
window.title("SmartAd Manager IgniterLabs")
window.geometry("900x500")
# Widgets
mainLabel = Label(window, text="Welcome to SmartAd management Tool",
font=("Arial Bold", 12))
activeAdsLabel = Label(window, text="Current Ads Available")
# Activate button
activateButton = Button(window, text="Activate Ad",
command=activateClicked)
# Deactivate Button
deactivateButton = Button(window, text="Deactivate Ad",
command=deactivateClicked)
# End Button
endButton = Button(window, text="End Ad",
command=endClicked)
# Quit button
quitButton = Button(window, text="Quit",
command=quit)
# Combo box to select the Ad
dropdownWidget = Combobox(window)
# Set the dropdownmenu contents
# Text filed for user
adTitleViewWidget = scrolledtext.ScrolledText(window)
# set the textfeild' contents
adm.UpdateUI(adTitleViewWidget, dropdownWidget, adTitles, ddMenuValues,currentAds)
# Set main label position on grid
mainLabel.grid(column=0, row=0)
dropdownWidget.grid(column=0, row=1)
activateButton.grid(column=1, row=1)
deactivateButton.grid(column=2, row=1)
endButton.grid(column=3, row=1)
activeAdsLabel.grid(column=0, row=2)
adTitleViewWidget.grid(column=0, row=3, columnspan=3)
quitButton.grid(column=0, row=4)
window.mainloop()
А вот вспомогательные методы, которые я использую:
def CreateYahooAdList(jsonSource, yahooAdList, adList):
# Test Ad simulate call from API
# TODO: Create call to API for Yahoo Ad to get every ad that is available
readFromAPI = jsonSource
# read in the file
parsedFile = yjp.readinJson(readFromAPI)
# create objects for each ad and add them into the Yahoo Ad list
yjp.createAdObjects(yahooAdList, parsedFile)
# Then add all the new Yahoo parsed ads (Now Ad Objects) into the myAds list
for ad in yahooAdList:
adList.append((ad))
'''
This method will get values from a Json file
In the future it will pull it off the Yahoo API
@:param textFeildValues = adTitles[] from SimpleUIControler
@:param comboValues = ddMenuValues[] from SimpleUIControler
@:param ads = currentAds from SimpleUIControler
'''
def UpdateUIValues(textFeildValues, comboValues, ads):
for ad in ads:
title = ad.title
status = ad.status
comboValues.append(title)
textFeildValues.append(title + "-" + status + "\n")
def UpdateUI(adTitleViewWidget, dropdownWidget, adTitle, dropdownValues, currentAds):
# First update the values to be used
UpdateUIValues(adTitle, dropdownValues, currentAds)
# Clear exsiting UI
adTitleViewWidget.delete(1.0, END)
for ad in adTitle:
adTitleViewWidget.insert(END, ad)
dropdownWidget['values'] = dropdownValues
# The init value
dropdownWidget.current(0)
Я ценю любую помощь с этим, поскольку пользовательский интерфейс на самом деле не моя вещь, и я пытаюсь научиться этому