我正在使用python日历前端来执行倒计时的python脚本。我可以从前端的变量打印到终端的字符串,它是我想要使用的格式,即:
(12/10/14 12:00:00, %m/%d/%y %H:%M:%S)
我遇到的麻烦是当我替换(ccDateTime)时(12/10/14) 在倒计时脚本中。
在倒计时脚本中我尝试了
from frontEnd import ccDateTime
然后我得到了
ImportError: cannot import name ccDateTime
当我尝试
时from frontEnd import *
我得到了
NameError: name 'ccDateTime' is not defined
我也试过传递
frontEnd.ccDateTime
没有运气
我在Ubuntu 14.04上使用python 2.7
日历前端使用类创建日期和时间变量,而倒计时则是没有类的脚本。
这让我疯狂(短途旅行) 如何将字符串变量从日历前端传递给倒计时脚本?
frontEnd.py
#!/usr/bin/env python2.7
# todo ->pass date & time values
import datetime
import Tkinter as tk # for Python 2.7
from Tkinter import *
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_title("Set Crew Change Clock")
self.set_size_request(300, 450)
self.set_position(gtk.WIN_POS_CENTER)
self.set_border_width(2)
self.cal_label = gtk.Label("Click on Crew Change Date")
self.colon = gtk.Label()
self.colon.set_markup("<b> : </b>")
self.time_label = gtk.Label("Set Crew Change Time")
hour_adj=gtk.Adjustment(12, 0, 23, 1, 0, 0)
self.hour = gtk.SpinButton(hour_adj, 0,0)
min_adj=gtk.Adjustment(0, 0, 59, 1, 0, 0)
self.minute = gtk.SpinButton(min_adj, 0, 0)
self.minute.set_text('{:02d}'.format(int(min_adj.get_value())))
# put the start button code here
self.start_button = gtk.Button(label="Start Crew Change Clock")
self.start_button.connect("clicked", self.on_button_click)
calendar = gtk.Calendar()
calendar.connect("day_selected", self.on_day_selected)
fix = gtk.Fixed()
fix.put(calendar, 20, 20)
fix.put(self.cal_label, 75, 230)
fix.put(self.hour, 81, 275)
fix.put(self.colon, 150, 278)
fix.put(self.minute, 172, 275)
fix.put(self.time_label, 85, 325)
fix.put(self.start_button, 70, 370)
self.add(fix)
self.connect("destroy", gtk.main_quit)
self.show_all()
def on_day_selected(self, widget):
(year, month, day) = widget.get_date()
self.cal_label.set_label(str(month+1) + "/" + str(day) + "/" + str(year))
def on_button_click(self, command):
if __name__ == "__main__":
ccDate = self.cal_label.get_text()
ccTime = self.hour.get_text() + ":" + self.minute.get_text() + ":00"
ccDateTime = str(ccDate + " " + ccTime)
PyApp()
gtk.main()
ccClock.py
#! /usr/bin/env python
# displays Crew Change Clock
# needs date and time of crew change passed from cc_front
import datetime
import Tkinter as tk # for Python 2.7
from Tkinter import *
from frontEnd import ccDateTime
san65 = ('Sans', 65)
def countdown(label):
def clock():
crewChange = datetime.datetime.strptime(ccDateTime, "%m/%d/%y %H:%M:%S")
remaining = crewChange-datetime.datetime.now()
days = remaining.days
hours = int(remaining.seconds) // 3600
minutes = int(remaining.seconds % 3600) // 60
seconds = int(remaining.seconds % 60)
displayFormat = 'Crew Change \n \n \n \n {} days \n \n \n \n {}:{}:{}'.format(days, hours, format(minutes, '02d'), format(seconds, '02d'))
label.config(text= ' {}'.format(displayFormat))
label.after(1000, clock)
clock()
root = tk.Tk()
root.title("Crew Change Clock")
logo = PhotoImage(file="cc3.ppm")
label = tk.Label(root, compound=CENTER, font=san65, image=logo, fg="red", bg='black')
countdown(label)
label.pack()
root.mainloop()
答案 0 :(得分:1)
您正在尝试导入在函数内定义的变量。我不认为可以做到。 在函数外部定义它并可以导入它。 &#34;如果名称 ==&#34; 主要&#34;:&#34;的目的是什么?在on_button_click()里面?
frontEnd.py
ccDateTime = ""
def on_button_click(self, command):
if __name__ == "__main__":
ccDate = self.cal_label.get_text()
ccTime = self.hour.get_text() + ":" + self.minute.get_text() + ":00"
global ccDateTime
ccDateTime = str(ccDate + " " + ccTime)
ccClock.py
from frontEnd import ccDateTime
print(ccDateTime)
答案 1 :(得分:0)
如何将字符串变量从日历前端传递给倒计时脚本?
执行此操作的一种方法是使用隐藏属性来保存您需要传递的信息。根据您的需要,这可以是一个独立的对象,类Cctime
,其数据属性可能为__cctime
,它将包含一些信息。每次需要传递信息时,都要创建该类的实例,并将该对象传递给另一个类。这为您提供了问责制和安全性。每个对象都是唯一的,您可以进行审核。就像在彩色纸上传递小纸条一样。
另一种方法是将它保存在类中的class属性中,该属性将在您要求时保存信息。每次传递信息后,它都可以重置为默认值。如果您不需要审计,可以使用ClassName.attribute
通常的方式访问它。在您目前的代码中,您似乎正面临着该属性的范围问题。
最后,如果您的ImportError
与您的脚本所在的目录相匹配,os.getcwd
经常会消失。
干杯。