【发布时间】:2020-12-03 08:38:21
【问题描述】:
这一直让我发疯,我很确定这是一个非常容易解决的问题,无论如何,我找不到任何解决方案,请帮忙。
我正在尝试在 python 中创建一个 gui,其中内容更新为选择下拉列表中的不同元素,一开始我根据第一个下拉选项制作内容,并默认为它。
现在当我打开 gui 时,内容不会根据选择的内容刷新,它保持不变。
这是我的代码:
#importing necessary libraries and frameworks
from firebase import firebase
import PySimpleGUI as sg
#declaring required variables
firebase_url = "https://***********.firebaseio.com/"
bicycle_1_url = '*******'
bicycle_2_url = '*******'
bicycle_3_url = '*******'
#setting firebase object with url to database
firebase = firebase.FirebaseApplication(firebase_url,None)
lockStatus = firebase.get(bicycle_1_url,'lockStatus')
current_cycle = 1
#Setting the change status button to dynamic text
if lockStatus == 'locked' :
label_change_status ='UnLock Bicycle'
else :
label_change_status ='Lock Bicycle'
#Declaring theme for the UI
sg.theme('DarkPurple4')
#Making the layout of GUI window (Every square bracket represents a row)
layout = [
[sg.Text('',size=(35,1))],
[sg.Text('Cycle ID: ',size=(10,1)), sg.Combo(['CY001','CY002','CY003'],size=
(6,1),key='cycle_id')],
[sg.Text(lockStatus,key='label_lockStatus')],
[sg.Button(label_change_status,key='ChangeStatus'),sg.Button('Exit')],
]
#Declaring your window
window = sg.Window('Lock Status Changer', layout)
#declaring event loop for the window
while True:
event, values = window.read()
print(event, values)
if event == sg.WIN_CLOSED or event == 'Exit':
break
if event == 'cycle_id':
cycle_no = window['cycle_id']
if cycle_no == 0:
current_cycle = 1
lockStatus = firebase.get(bicycle_1_url,'lockStatus')
window['label_lockStatus'].update[lockStatus]
if cycle_no == 1:
current_cycle = 2
lockStatus = firebase.get(bicycle_2_url,'lockStatus')
window['label_lockStatus'].update[lockStatus]
if cycle_no == 2:
current_cycle = 3
lockStatus = firebase.get(bicycle_3_url,'lockStatus')
window['label_lockStatus'].update[lockStatus]
if event == 'ChangeStatus':
#Change the lock status of selected bicycle
if current_cycle == 1 :
if lockStatus == 'locked' :
firebase.put(bicycle_1_url,'lockStatus','unlocked')
lockStatus == 'unlocked'
label_change_status =='Lock Bicycle'
else :
firebase.put(bicycle_1_url,'lockStatus','locked')
lockStatus == 'locked'
label_change_status =='Unlock Bicycle'
if current_cycle == 2 :
if lockStatus == 'locked' :
firebase.put(bicycle_2_url,'lockStatus','unlocked')
lockStatus == 'unlocked'
label_change_status =='Lock Bicycle'
else :
firebase.put(bicycle_2_url,'lockStatus','locked')
lockStatus == 'locked'
label_change_status =='Unlock Bicycle'
if current_cycle == 3 :
if lockStatus == 'locked' :
firebase.put(bicycle_3_url,'lockStatus','unlocked')
lockStatus == 'unlocked'
label_change_status =='Lock Bicycle'
else :
firebase.put(bicycle_3_url,'lockStatus','locked')
lockStatus == 'locked';
label_change_status =='Unlock Bicycle'
#Updating the lockstatus to the window
window['ChangeStatus'].update(values[label_change_status])
#closing window when loop ends
window.close()
我应该改变什么让它知道我已经更新了我的选择?
【问题讨论】:
-
尝试窗口[combo].Get()
-
@matanh 哦,我最终尝试了这个并且确实有效,抱歉回复晚了
-
当我再次查看您的代码时,我发现您可以将
window['cycle_id']替换为values ['cycle_id'] -
是的,我可以,反正这个项目早就结束了,我最终只是重组了我的 UI 来解决这个问题。感谢您的解决方案
-
我已将此作为答案发布
标签: python python-3.x user-interface anaconda pysimplegui