Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 标签不是';t改变_Python_Python 2.7_Tkinter - Fatal编程技术网

Python 标签不是';t改变

Python 标签不是';t改变,python,python-2.7,tkinter,Python,Python 2.7,Tkinter,我只想发布我的代码片段,因为本质上,它做的是相同的事情 string = '' time_calc = Tk() time_calc.geometry('500x400') time_calc.title("Calculate A Time") time_calc_frame= Frame(time_calc).grid(row=0, column=0) jul_box = Entry(time_calc) jul_box.insert(0, "Julian Date") jul_box.p

我只想发布我的代码片段,因为本质上,它做的是相同的事情

string = ''

time_calc = Tk()
time_calc.geometry('500x400')
time_calc.title("Calculate A Time")
time_calc_frame= Frame(time_calc).grid(row=0, column=0)

jul_box = Entry(time_calc)
jul_box.insert(0, "Julian Date")
jul_box.pack(side = TOP)
jul_box.bind('<Return>')

def jd2gd(jd):
  global string
  jd=jd+0.5
  Z=int(jd)
  F=jd-Z
  alpha=int((Z-1867216.25)/36524.25)
  A=Z + 1 + alpha - int(alpha/4)

  B = A + 1524
  C = int( (B-122.1)/365.25)
  D = int( 365.25*C )
  E = int( (B-D)/30.6001 )

  dd = B - D - int(30.6001*E) + F

  if E<13.5:
            mm=E-1

  if E>13.5:
            mm=E-13

  if mm>2.5:
            yyyy=C-4716

  if mm<2.5:
            yyyy=C-4715

  months=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
  daylist=[31,28,31,30,31,30,31,31,30,31,30,31]
  daylist2=[31,29,31,30,31,30,31,31,30,31,30,31]

  h=int((dd-int(dd))*24)
  min =int((((dd-int(dd))*24)-h)*60)
  sec=86400*(dd-int(dd))-h*3600-min*60

  # Now calculate the fractional year. Do we have a leap year?
  if (yyyy%4 != 0):
            days=daylist2
  elif (yyyy%400 == 0):
            days=daylist2
  elif (yyyy%100 == 0):
            days=daylist
  else:
            days=daylist2

  hh = 24.0*(dd % 1.0)
  min = 60.0*(hh % 1.0)
  sec = 60.0*(min % 1.0)

  dd =  dd-(dd%1.0)
  hh =  hh-(hh%1.0)
  min =  min-(min%1.0)

  if hh < 10:
    hh = '0%s'%str(int(hh))
  else:
      hh = int(hh)
  if min < 10:
    min = '0%s'%str(int(min))
  else:
      min = int(min)
  if sec < 10:
    sec = '0%s'%str(int(sec))
  else:
      sec = int(sec)

  string = "%s/%s/%s  %s:%s:%s UTC" % (str(int(mm)), str(int(dd)), str(yyyy), str(hh),               str(min), str(sec))
  print string
  return


def j2ghandler():
  jul = float(jul_box.get())

  jd2gd(jul)

j2g_button = Button(time_calc, text='Convert Julian\n to Gregorian', command = j2ghandler, width= 25, pady=5).pack(side=TOP)

#Draw Time String on Canvas
var = StringVar()
var.set(string)
label = Label(time_calc, textvariable=var)
label.pack(side=TOP)
string=''
时间计算=Tk()
时间计算几何(“500x400”)
时间计算标题(“计算时间”)
时间计算框架=框架(时间计算).grid(行=0,列=0)
七月框=输入(时间计算)
七月方框。插入(0,“朱利安日期”)
7月包装(侧面=顶部)
七月箱绑定(“”)
def jd2gd(jd):
全局字符串
jd=jd+0.5
Z=int(jd)
F=jd-Z
阿尔法=整数((Z-1867216.25)/36524.25)
A=Z+1+alpha-int(alpha/4)
B=A+1524
C=int((B-122.1)/365.25)
D=int(365.25*C)
E=int((B-D)/30.6001)
dd=B-D-int(30.6001*E)+F
如果E13.5:
mm=E-13
如果毫米>2.5:
yyyy=C-4716

如果mm我会偏离使用
全局
,尤其是使用
字符串
,因为它是不明确的

jd2gd
return
string
(或您决定给它的任何新名称)放在程序底部,并将代码包含在
j2ghandler
中。例如:

def j2ghandler():
    jul = float(jul_box.get())
    gregDate = jd2gd(jul)
    label = Label(time_calc, text=gregDate)
    label.pack(side=TOP)
然后删除最后4行

我尚未对此进行测试,因此如果出现错误,一种解决方案是将按钮更改为:

j2g_button = Button(time_calc, text='Convert Julian\n to Gregorian', command=lambda: j2ghandler(time_calc), width= 25, pady=5)
j2g_button.pack(side=TOP)
j2ghandler
到:

def j2ghandler(master):
    jul = float(jul_box.get())
    gregDate = jd2gd(jul)
    label = Label(master, text=gregDate)
    label.pack(side=TOP)

顺便说一下。。。 您可能需要更改:

j2g_button = Button(time_calc, text='Convert Julian\n to Gregorian', command = j2ghandler, width= 25, pady=5).pack(side=TOP)
致:

它按原样工作,但如果您再次尝试使用
j2g_按钮
,它将返回一个
none
对象


祝你好运

您需要记住,这个GUI模块(与几乎所有模块一样)是事件驱动的,这意味着每当发生某个事件时(单击按钮等),都会调用函数,这都是由Tkinter的mainloop完成的

在您的情况下:超过您的定义代码(所有的
time\u calc=Tk()
等等),您开始循环;然后,当点击按钮的事件触发时,它会导致绑定函数的调用(
j2ghandler()
)。从现在起,应用程序将等待它返回,并返回其循环

解决方案 我假设您想要更改按钮下方的标签文本,当按下按钮时(时间被转换)

您需要在调用函数的事件中设置标签的值;此处,打印后:

def jd2gd(jd):
    #global string
    ...
    print string
    var.set(string)
    #return
注意:不需要注释行

标签已更改,无需重新创建
标签
对象。 另外,Al.Sal关于globals的提示在这里很重要。请求函数不应保存状态


祝Python好运

注释框中的部分是我更改的:

#####################
from Tkinter import *
#####################
string = ''

time_calc = Tk()
time_calc.geometry('500x400')
time_calc.title("Calculate A Time")
time_calc_frame= Frame(time_calc).grid(row=0, column=0)

jul_box = Entry(time_calc)
jul_box.insert(0, "Julian Date")
jul_box.pack(side = TOP)
jul_box.bind('<Return>')

def jd2gd(jd):
  global string
  jd=jd+0.5
  Z=int(jd)
  F=jd-Z
  alpha=int((Z-1867216.25)/36524.25)
  A=Z + 1 + alpha - int(alpha/4)

  B = A + 1524
  C = int( (B-122.1)/365.25)
  D = int( 365.25*C )
  E = int( (B-D)/30.6001 )

  dd = B - D - int(30.6001*E) + F

  if E<13.5:
            mm=E-1

  if E>13.5:
            mm=E-13

  if mm>2.5:
            yyyy=C-4716

  if mm<2.5:
            yyyy=C-4715

  months=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
  daylist=[31,28,31,30,31,30,31,31,30,31,30,31]
  daylist2=[31,29,31,30,31,30,31,31,30,31,30,31]

  h=int((dd-int(dd))*24)
  min =int((((dd-int(dd))*24)-h)*60)
  sec=86400*(dd-int(dd))-h*3600-min*60

  # Now calculate the fractional year. Do we have a leap year?
  if (yyyy%4 != 0):
            days=daylist2
  elif (yyyy%400 == 0):
            days=daylist2
  elif (yyyy%100 == 0):
            days=daylist
  else:
            days=daylist2

  hh = 24.0*(dd % 1.0)
  min = 60.0*(hh % 1.0)
  sec = 60.0*(min % 1.0)

  dd =  dd-(dd%1.0)
  hh =  hh-(hh%1.0)
  min =  min-(min%1.0)

  if hh < 10:
    hh = '0%s'%str(int(hh))
  else:
      hh = int(hh)
  if min < 10:
    min = '0%s'%str(int(min))
  else:
      min = int(min)
  if sec < 10:
    sec = '0%s'%str(int(sec))
  else:
      sec = int(sec)

  string = "%s/%s/%s  %s:%s:%s UTC" % (str(int(mm)), str(int(dd)), str(yyyy), str(hh),               str(min), str(sec))
  print string
  ##############
  return string
  ##############


def j2ghandler():
  jul = float(jul_box.get())

  #####################
  var.set(jd2gd(jul))
  #####################

j2g_button = Button(time_calc, text='Convert Julian\n to Gregorian', command = j2ghandler, width= 25, pady=5).pack(side=TOP)

#Draw Time String on Canvas
var = StringVar()
var.set(string)
label = Label(time_calc, textvariable=var)
label.pack(side=TOP)

##############################
time_calc.mainloop()
##############################
#####################
从Tkinter进口*
#####################
字符串=“”
时间计算=Tk()
时间计算几何(“500x400”)
时间计算标题(“计算时间”)
时间计算框架=框架(时间计算).grid(行=0,列=0)
七月框=输入(时间计算)
七月方框。插入(0,“朱利安日期”)
7月包装(侧面=顶部)
七月箱绑定(“”)
def jd2gd(jd):
全局字符串
jd=jd+0.5
Z=int(jd)
F=jd-Z
阿尔法=整数((Z-1867216.25)/36524.25)
A=Z+1+alpha-int(alpha/4)
B=A+1524
C=int((B-122.1)/365.25)
D=int(365.25*C)
E=int((B-D)/30.6001)
dd=B-D-int(30.6001*E)+F
如果E13.5:
mm=E-13
如果毫米>2.5:
yyyy=C-4716
如果嗯
#####################
from Tkinter import *
#####################
string = ''

time_calc = Tk()
time_calc.geometry('500x400')
time_calc.title("Calculate A Time")
time_calc_frame= Frame(time_calc).grid(row=0, column=0)

jul_box = Entry(time_calc)
jul_box.insert(0, "Julian Date")
jul_box.pack(side = TOP)
jul_box.bind('<Return>')

def jd2gd(jd):
  global string
  jd=jd+0.5
  Z=int(jd)
  F=jd-Z
  alpha=int((Z-1867216.25)/36524.25)
  A=Z + 1 + alpha - int(alpha/4)

  B = A + 1524
  C = int( (B-122.1)/365.25)
  D = int( 365.25*C )
  E = int( (B-D)/30.6001 )

  dd = B - D - int(30.6001*E) + F

  if E<13.5:
            mm=E-1

  if E>13.5:
            mm=E-13

  if mm>2.5:
            yyyy=C-4716

  if mm<2.5:
            yyyy=C-4715

  months=["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
  daylist=[31,28,31,30,31,30,31,31,30,31,30,31]
  daylist2=[31,29,31,30,31,30,31,31,30,31,30,31]

  h=int((dd-int(dd))*24)
  min =int((((dd-int(dd))*24)-h)*60)
  sec=86400*(dd-int(dd))-h*3600-min*60

  # Now calculate the fractional year. Do we have a leap year?
  if (yyyy%4 != 0):
            days=daylist2
  elif (yyyy%400 == 0):
            days=daylist2
  elif (yyyy%100 == 0):
            days=daylist
  else:
            days=daylist2

  hh = 24.0*(dd % 1.0)
  min = 60.0*(hh % 1.0)
  sec = 60.0*(min % 1.0)

  dd =  dd-(dd%1.0)
  hh =  hh-(hh%1.0)
  min =  min-(min%1.0)

  if hh < 10:
    hh = '0%s'%str(int(hh))
  else:
      hh = int(hh)
  if min < 10:
    min = '0%s'%str(int(min))
  else:
      min = int(min)
  if sec < 10:
    sec = '0%s'%str(int(sec))
  else:
      sec = int(sec)

  string = "%s/%s/%s  %s:%s:%s UTC" % (str(int(mm)), str(int(dd)), str(yyyy), str(hh),               str(min), str(sec))
  print string
  ##############
  return string
  ##############


def j2ghandler():
  jul = float(jul_box.get())

  #####################
  var.set(jd2gd(jul))
  #####################

j2g_button = Button(time_calc, text='Convert Julian\n to Gregorian', command = j2ghandler, width= 25, pady=5).pack(side=TOP)

#Draw Time String on Canvas
var = StringVar()
var.set(string)
label = Label(time_calc, textvariable=var)
label.pack(side=TOP)

##############################
time_calc.mainloop()
##############################