可以多次转换的温度转换程序

itkeeper 发表于2017年05月03日
<p>拷贝老师给的温度转换程序,我已经注释掉了点击事件,退出程序的代码,只能转换一次,然后就没有反应了。</p><p><br ></p><p>我给改了一下,用一个while死循环,可以做到无数次的转换。可是关掉窗口后,Python Shell报错:</p><p>in getMouse</p><p>&nbsp; &nbsp; if self.isClosed(): raise GraphicsError(&quot;getMouse in closed window&quot;)</p><p>graphics.GraphicsError: getMouse in closed window</p><p><br ></p><p><code class="brush:python;toolbar:false" >from&nbsp;graphics&nbsp;import&nbsp;* def&nbsp;convert(input): &nbsp;&nbsp;&nbsp;&nbsp;celsius&nbsp;=&nbsp;eval(input.getText())&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;输入转换 &nbsp;&nbsp;&nbsp;&nbsp;fahrenheit&nbsp;=&nbsp;9.0/5.0&nbsp;*&nbsp;celsius&nbsp;+&nbsp;32 &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;fahrenheit&nbsp; def&nbsp;colorChange(win,input): &nbsp;&nbsp;&nbsp;&nbsp;cnum&nbsp;=&nbsp;eval(input.getText()) &nbsp;&nbsp;&nbsp;&nbsp;weight&nbsp;=&nbsp;cnum&nbsp;/&nbsp;100.0 &nbsp;&nbsp;&nbsp;&nbsp;newcolor&nbsp;=&nbsp;color_rgb(&nbsp;int(255*weight),&nbsp;int(66+150*(1-weight)),&nbsp;int(255*(1-weight))&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;win.setBackground(newcolor) def&nbsp;main(): &nbsp;&nbsp;&nbsp;&nbsp;win&nbsp;=&nbsp;GraphWin(&quot;Celsius&nbsp;Converter&quot;,&nbsp;400,&nbsp;300) &nbsp;&nbsp;&nbsp;&nbsp;win.setCoords(0.0,&nbsp;0.0,&nbsp;3.0,&nbsp;4.0) &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;绘制输入接口 &nbsp;&nbsp;&nbsp;&nbsp;Text(Point(1,3),&quot;&nbsp;Celsius&nbsp;Temperature:&quot;).draw(win) &nbsp;&nbsp;&nbsp;&nbsp;Text(Point(2,2.7),&nbsp;&quot;&nbsp;(Please&nbsp;input&nbsp;0.0-100.0&nbsp;)&quot;).draw(win) &nbsp;&nbsp;&nbsp;&nbsp;Text(Point(1,1),&nbsp;&quot;Fahrenheit&nbsp;Temperature:&quot;).draw(win) &nbsp;&nbsp;&nbsp;&nbsp;input&nbsp;=&nbsp;Entry(Point(2,3),&nbsp;5) &nbsp;&nbsp;&nbsp;&nbsp;input.setText(&quot;0.0&quot;) &nbsp;&nbsp;&nbsp;&nbsp;input.draw(win) &nbsp;&nbsp;&nbsp;&nbsp;output&nbsp;=&nbsp;Text(Point(2,1),&quot;&quot;) &nbsp;&nbsp;&nbsp;&nbsp;output.draw(win) &nbsp;&nbsp;&nbsp;&nbsp;button&nbsp;=&nbsp;Text(Point(1.5,2.0),&quot;Convert&nbsp;It&quot;) &nbsp;&nbsp;&nbsp;&nbsp;button.draw(win) &nbsp;&nbsp;&nbsp;&nbsp;rect&nbsp;=&nbsp;Rectangle(Point(1,1.5),&nbsp;Point(2,2.5)) &nbsp;&nbsp;&nbsp;&nbsp;rect.draw(win) &nbsp;&nbsp;&nbsp;&nbsp;while(True): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;等待鼠标点击 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;win.getMouse() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;=&nbsp;convert(input)&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;转换输入 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output.setText(result)&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;显示输出&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;改变颜色 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;colorChange(win,input) &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;改变按钮字体 &nbsp;&nbsp;&nbsp;&nbsp;#button.setText(&quot;Quit&quot;) &nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;等待点击事件,退出程序 &nbsp;&nbsp;&nbsp;&nbsp;#win.getMouse() &nbsp;&nbsp;&nbsp;&nbsp;#win.close() &nbsp;&nbsp;&nbsp;&nbsp; if&nbsp;__name__&nbsp;==&nbsp;'__main__': &nbsp;&nbsp;&nbsp;&nbsp;main()</code></p>
1 回复

    1楼

  • 张修海 发表于2017年05月03日
    0 | 1 | 举报
    <p>在main()里加个try...except语句,</p><p>try:</p><p>&nbsp; &nbsp; .....</p><p>except:</p><p>&nbsp; &nbsp; pass</p><p>报错信息就会被忽略掉</p>
    张修海 发表于2017年05月03日
    • itkeeper 2017年05月05日
      0 | 举报
      我觉得这不是解决办法。可否监测到关闭事件,w做相关操作呢
      itkeeper 发表于2017年05月05日
      0 | 举报
    添加评论