當彈出視窗位于不同的 .py 檔案中時,我無法從自定義彈出視窗回傳變數。正如在 Stack Overflow 上已經回答的那樣,這可以通過全域變數來解決。但是,此解決方案僅在所有函式都在單個 .py 中時才有效。代表該問題的代碼如下:
主要.py:
from tkinter import *
import main_popups as main_popups
def main_screen():
global screen
screen = Tk()
main_btn= Button(screen, text = "Press me")
main_btn.pack()
main_btn.configure(command = pressed)
screen.mainloop()
def pressed():
main_popups.input_box(screen)
print(output_variable)
main_screen()
main_popups.py:
def input_box(screen):
global input_box_screen
def btn_press():
global output_variable
output_variable = entry.get()
input_box_screen.destroy()
input_box_screen.update()
print(output_variable)
input_box_screen = Toplevel(screen)
entry = Entry(input_box_screen)
entry.pack()
btn = Button (input_box_screen, text = "Confirm")
btn.pack()
btn.configure(command = btn_press)
screen.wait_window(input_box_screen)
這會在 處引發錯誤print(output_variable),因為output_variable不會從btn_pressin回傳main_popups.py。我的問題是如何將文本從 Entry in 回傳main_popups.py到main.py?我試圖return(output_variable)在結束時def btn_press():,但這并沒有回傳任何東西。
uj5u.com熱心網友回復:
對于您的情況,您不需要全域變數,只需output_variable在末尾回傳main_popups.input_box():
主檔案
from tkinter import *
import main_popups
def main_screen():
global screen
screen = Tk()
main_btn= Button(screen, text = "Press me")
main_btn.pack()
main_btn.configure(command = pressed)
screen.mainloop()
def pressed():
output_variable = main_popups.input_box(screen)
print(output_variable)
main_screen()
main_popups.py
from tkinter import *
def input_box(screen):
output_variable = None
def btn_press():
nonlocal output_variable
output_variable = entry.get()
input_box_screen.destroy()
input_box_screen.update()
input_box_screen = Toplevel(screen)
entry = Entry(input_box_screen)
entry.pack()
btn = Button (input_box_screen, text = "Confirm")
btn.pack()
btn.configure(command = btn_press)
screen.wait_window(input_box_screen)
return output_variable
uj5u.com熱心網友回復:
您可以from main_popups import output_variable在執行 main_popups.py 后匯入 output_variable (在第 14 行和第 15 行之間)
PS.:也許你不應該使用標簽 tkinter,因為它是一個非常具體的標簽,你會得到更快的回復。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/512056.html
