我正在使用 Jupyter 筆記本來撰寫一個包含大量 "if "陳述句的 tkinter 演算法。
我希望這些 "if "陳述句中的某些陳述句能夠在某些點上停止程式的運行(但不是停止 tkinter 視窗的運行),而不回傳到代碼的主流程。 我寫了一個小的示例應用程式(如下)來說明我的意思。
我嘗試使用 quit()、exit()、sys.exit()和 os.exit()。quit()和exit()似乎都能正常作業,它們說 "Hi "而不是 "bye",正如預期的那樣。 但是當我關閉 tkinter 視窗時,我仍然得到一些不需要的讀數 - 我想這可能是 Jupyters 的錯,而不是 python 或 tkinter 的錯。 它通常會說,"內核似乎已經死亡。它將自動重新啟動。"
示例腳本包含了上述的每一個命令,它使用注釋 "#"來切換行的開與關。 腳本中的代碼旁邊還注釋了每種情況下不需要的讀出和資訊。
我擔心的是,如果我繼續撰寫代碼,不需要的讀出是否會有問題,甚至是一種安全威脅,因為其中一些if陳述句將被用于受密碼保護的區域。 如果不需要的資訊來自于Jupyter,那么一旦我將代碼編譯為exe,這些資訊將是良性的、透明的,這樣的假設是否正確?
我的代碼如下:
import tkinter
from tkinter import *
import tkinter as tk
import sys
import os
def routine()。
x=0
if x < 1:
print("Hi"/span>)
# quit() # print Hi and not bye;
# 當被銷毀時,它說內核正在重新啟動。
# 內核似乎已經死亡。它將自動重新啟動。
# exit() # 在表面上--它似乎做了所有與quit相同的事情。
# sys.exit() # Prints Hi
# and then...
# 發生了一個例外,使用%tb來查看完整的回溯。
# SystemExit。
# Then the entire systems, including the tkinter window,
# 鎖住了,并且什么也不做。
# 關閉按鈕甚至不作業。
# os._exit() # Tkinter回呼中出現例外。
# Traceback (most recent call last):
# File "C:Users
rrlib kinter\__init__.py",第1705行,在__call__中
# return self.func(*args)
# File "<ipython-input-3-c9d340ae6a31>", line 31, in routine
# os._exit()
# TypeError: _exit()缺少必要的引數'status' (pos 1)
if x > 1:
print("bye...")
root = Tk()
root.geometry("300x200 200 200")
btn1 = Button(root, text ="Run A Routine", command = routine)
btn1.pack(pady = 20, anchor='center' )
btn1 = Button(root, text ="關閉視窗", command = root.destroy)
btn1.pack(pady = 20, anchor='center')
root.mainloop()
uj5u.com熱心網友回復:
我想知道你說的 "停止運行程式 "是什么意思?你是指退出你所寫的函式/子程式嗎?因為如果是這樣的話,你應該簡單地使用return來退出定義的例程。
如果你想做一些更復雜的事情,你可能需要洗掉你的.mainloop()更新tkinter的呼叫,而使用下面這樣的方法:
RUN_FLAG = True
while RUN_FLAG:
root.update_idletasks()
root.update()
time.sleep(0.01)
這將允許你在子程式中更新全域變數RUN_FLAG,并使用它來超越你的tkinter,然后完成你的腳本。
另外,附帶說明;在我看來,在 Jupyter 中運行 tkinter 是有點奇怪的。如果你的解決方案變得更加廣泛,你可能會從一個標準的python腳本中獲得更好的性能。我推薦JetBrains的 "PyCharm "作為一個IDE。
uj5u.com熱心網友回復:
Angus B:我喜歡你關于使用回傳的想法,我不知道我可以這樣做--因為我在編程方面還太陌生。 但它似乎像我想要的那樣作業。 下面的代碼展示了我的意思。
如果你按原樣運行,那么它將在第7行的return命令處停止,并將 "Hi A "列印到命令列。
但是如果你注釋了第7行,那么它將會列印
"Hi A"。
"Hi A" "Hi B"
我不太理解使用return與使用exit或quit之間的區別,但return似乎能做更多我想要的事情。 我將繼續研究它。 謝謝你的回答。
鄭重宣告,我的問題可能不是最前沿的研究,但它有點不同,而且已經得到了回答。 如果你愿意,我們可以繼續討論。
import tkinter
def routine (x)。
if x == "A"/span>:
print("Hi A1")
return("Hi A1")
if x == "B":
print("Hi B")
if x == "A":
print("Hi A2"/span>)
root = Tk()
root.geometry("300x200 200 200")
btn1 = Button(root, text ="Run A Routine", command =lambda: routine("A")
btn1.pack(pady = 20, anchor='center' )
btn1 = Button(root, text ="關閉視窗", command = root.destroy)
btn1.pack(pady = 20, anchor='center')
root.mainloop()
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/319453.html
標籤:
