我需要一些关于我的代码的帮助,我正在使用两个不同的函数,一个用于选择数据库中的数据,另一个用于通过键盘控制向右移动。我想减少代码以避免在一个函数中添加相同的代码行。在
但是,当我尝试以下操作时:
import move_right
class MyClass(xbmcgui.WindowXML):
def GoRight(self):
move_right.GoRight(self)
我将得到一个错误:名称错误:未定义全局名称“程序停止分钟”。
错误跳到这一行:
^{pr2}$这是行动_对.py找到错误的脚本:
import datetime
import time
import xbmc
import xbmcgui
prog_id = 0
select_db_flag = False
def select_db(self):
program_button = [elem.control for elem in self.program_buttons]
programs_id = list()
program_width = list()
positions_X = list()
positions_Y = list()
for elem in program_button:
programs_id.append(elem.getId())
positions_X.append(elem.getX())
positions_Y.append(elem.getY())
program_width.append(elem.getWidth())
programs_id = map(str, programs_id)
posX = map(str, positions_X)
posY = map(str, positions_Y)
program_width = map(str, program_width)
for pos_X, pos_Y, prog_id, prog_width in zip(positions_X, positions_Y, programs_id, program_width):
if select_db_flag == True:
profilePath = xbmc.translatePath(os.path.join('special://userdata/addon_data/script.tvguide', 'source.db'))
conn1 = database.connect(profilePath)
cur1 = conn1.cursor()
cur1.execute('SELECT stop_date FROM programs where button_id=?', [prog_id])
stop_date = cur1.fetchone()
if stop_date is not None:
stop_date = str(stop_date[0])
stop_time = time.strptime(str(stop_date), '%Y%m%d%H%M%S')
stop_time = datetime.datetime.fromtimestamp(time.mktime(stop_time))
program_stop_hours = stop_time.strftime('%H')
program_stop_minutes = stop_time.strftime('%M')
program_AM_PM = stop_time.strftime('%p')
half_hour = str(self.getControl(344).getLabel())
one_hour = str(self.getControl(345).getLabel())
one_hour_half = str(self.getControl(346).getLabel())
epg_time_1 = time.strptime(half_hour, '%I:%M%p')
epg_time_2 = time.strptime(one_hour, '%I:%M%p')
epg_time_3 = time.strptime(one_hour_half, '%I:%M%p')
program_stop_time = program_stop_hours +':' + program_stop_minutes + program_AM_PM
program_stop_time = time.strptime(program_stop_time, '%I:%M%p')
def GoRight(self):
if int(pos_X) == 616 and int(prog_width) == 515:
if program_stop_minutes == '05':
programs_width = 399
self.getControl(int(prog_id)).setWidth(int(programs_width))
nextprogram = int(prog_id) + 1
nextprogramX = self.getControl(int(nextprogram)).getX()
nextprogram_width = self.getControl(int(nextprogram)).getWidth()
self.getControl(int(nextprograms)).setPosition(780, int(pos_Y))
self.select_db()
select_db_flag = True
当我想从select_db
函数调用以获得timedelta的返回输出时,我想定义program_stop_minutes
,但我不知道如何做到这一点。在
当我想从select_db
函数调用timedelta的返回输出时,你能帮助我如何定义program_stop_minutes
?在
正如错误消息明确指出的那样,
program_stop_minutes
不是全局变量。您在select_db
中定义它,因此它在该函数的作用域内只能访问。如果要从其他函数(如GoRight
)访问它,则需要在全局范围内定义变量或返回函数的值。在全球范围
从
select_db
返回值如果您想从
^{pr2}$select_db
返回信息,而不是使用全局变量,则可以执行以下操作:如果需要从函数返回多个值,则可以作为元组返回。您可以用这种方式返回任意数量的参数。在
作为补充说明,我不确定您为什么到处使用
self
变量。你认为这些都是一个类的方法吗?正如你目前写的,他们不是。它们只是函数。在相关问题 更多 >
编程相关推荐