我試圖將函式轉換為 tkinter 中的模塊;但是,它失敗了。
原始版本:在主要代碼中嵌入一個函式(sl_adder)
這里我使用.get()
函式
from tkinter import *
import tkinter.ttk as ttk
def sl_adder():
aa = float(xxx.get())
bb = float(yyy.get())
cc = aa bb
mylabel = ttk.Label(root, text = cc).grid(column=1, row=4, padx=10, pady=15, sticky=N)
root = Tk()
root.title('Denny')
root.geometry("800x900")
xxx = StringVar()
yyy = StringVar()
ttk.Label(root,text = "Adding System", font=('Arial', 25)).grid(column=0, row=0, ipadx=5, pady=5, sticky=W N)
ttk.Label(root,text = "Input Two Numbers", font=('Arial', 10)).grid(column=0, row=1, ipadx=5, pady=20, sticky=W N)
ttk.Label(root,text = "1st number: ", font=('Arial', 10)).grid(column=0, row=2, ipadx=5, pady=15, sticky=W N)
ttk.Label(root,text = "2nd number: ", font=('Arial', 10)).grid(column=0, row=3, ipadx=5, pady=15, sticky=W N)
ttk.Entry(root, textvariable=xxx, width=20).grid(column=1, row=2, padx=10, pady=15, sticky=N)
ttk.Entry(root, textvariable=yyy, width=20).grid(column=1, row=3, padx=10, pady=15, sticky=N)
resultButton = ttk.Button(root, text = 'Calculate', command = sl_adder)
resultButton.grid(column=3, row=2, pady=15, sticky=W)
close_window = ttk.Button(root, text="Destroy", command = root.destroy)
close_window.grid(column=3, row=3, pady=15, sticky=W)
第二版:將函式轉換為模塊(sl_adder)
from tkinter import *
import tkinter.ttk as ttk
from sl_adder import sl_adder # <-------------------------
root = Tk()
root.title('Denny')
root.geometry("800x900")
xxx = StringVar()
yyy = StringVar()
ttk.Label(root,text = "Adding System", font=('Arial', 25)).grid(column=0, row=0, ipadx=5, pady=5, sticky=W N)
ttk.Label(root,text = "Input Two Numbers", font=('Arial', 10)).grid(column=0, row=1, ipadx=5, pady=20, sticky=W N)
ttk.Label(root,text = "1st number: ", font=('Arial', 10)).grid(column=0, row=2, ipadx=5, pady=15, sticky=W N)
ttk.Label(root,text = "2nd number: ", font=('Arial', 10)).grid(column=0, row=3, ipadx=5, pady=15, sticky=W N)
ttk.Entry(root, textvariable=xxx, width=20).grid(column=1, row=2, padx=10, pady=15, sticky=N)
ttk.Entry(root, textvariable=yyy, width=20).grid(column=1, row=3, padx=10, pady=15, sticky=N)
resultButton = ttk.Button(root, text = 'Calculate', command = sl_adder)
resultButton.grid(column=3, row=2, pady=15, sticky=W)
close_window = ttk.Button(root, text="Destroy", command = root.destroy)
close_window.grid(column=3, row=3, pady=15, sticky=W)
模塊sl_adder
:
def sl_adder():
aa = float(xxx.get())
bb = float(yyy.get())
cc = aa bb
mylabel = ttk.Label(root, text = cc).grid(column=1, row=4, padx=10, pady=15, sticky=N)
當我運行它時,它顯示:
NameError: name 'xxx' is not defined
如何解決?我只洗掉該功能并生成一個模塊。
==================================================== ==========
現在我將其修復如下
from tkinter import *
import tkinter.ttk as ttk
from sl_adder import sl_adder
root = Tk()
root.title('Denny')
root.geometry("800x900")
xxx = StringVar()
yyy = StringVar()
ttk.Label(root,text = "Adding System", font=('Arial', 25)).grid(column=0, row=0, ipadx=5, pady=5, sticky=W N)
ttk.Label(root,text = "Input Two Numbers", font=('Arial', 10)).grid(column=0, row=1, ipadx=5, pady=20, sticky=W N)
ttk.Label(root,text = "1st number: ", font=('Arial', 10)).grid(column=0, row=2, ipadx=5, pady=15, sticky=W N)
ttk.Label(root,text = "2nd number: ", font=('Arial', 10)).grid(column=0, row=3, ipadx=5, pady=15, sticky=W N)
ttk.Entry(root, textvariable=xxx, width=20).grid(column=1, row=2, padx=10, pady=15, sticky=N)
ttk.Entry(root, textvariable=yyy, width=20).grid(column=1, row=3, padx=10, pady=15, sticky=N)
aa = float(xxx.get()) # <=====================
bb = float(yyy.get()) # <=====================
resultButton = ttk.Button(root, text = 'Calculate', command = sl_adder(aa,bb))
resultButton.grid(column=3, row=2, pady=15, sticky=W)
close_window = ttk.Button(root, text="Destroy", command = root.destroy)
close_window.grid(column=3, row=3, pady=15, sticky=W)
root.mainloop()
帶模塊
def sl_adder(aa,bb):
cc = aa bb
mylabel = ttk.Label(root, text = cc).grid(column=1, row=4, padx=10, pady=15, sticky=N)
但是,彈出另一個錯誤
aa = float(xxx.get())
ValueError: could not convert string to float: ''
如何解決?
uj5u.com熱心網友回復:
由于主應用程式和模塊位于不同的作業空間中,因此您無法直接在模塊內部訪問主應用程式中的全域變數。但是,您可以通過函式引數傳遞它們。
此外,最好在主應用程式中而不是在模塊函式中創建結果標簽。主應用程式可以從模塊函式中獲取結果并更新結果文本。
主要應用:
from tkinter import *
import tkinter.ttk as ttk
from sl_adder import sl_adder
root = Tk()
root.title('Denny')
root.geometry("800x900")
xxx = StringVar()
yyy = StringVar()
ttk.Label(root,text = "Adding System", font=('Arial', 25)).grid(column=0, row=0, ipadx=5, pady=5, sticky=W N)
ttk.Label(root,text = "Input Two Numbers", font=('Arial', 10)).grid(column=0, row=1, ipadx=5, pady=20, sticky=W N)
ttk.Label(root,text = "1st number: ", font=('Arial', 10)).grid(column=0, row=2, ipadx=5, pady=15, sticky=W N)
ttk.Label(root,text = "2nd number: ", font=('Arial', 10)).grid(column=0, row=3, ipadx=5, pady=15, sticky=W N)
ttk.Entry(root, textvariable=xxx, width=20).grid(column=1, row=2, padx=10, pady=15, sticky=N)
ttk.Entry(root, textvariable=yyy, width=20).grid(column=1, row=3, padx=10, pady=15, sticky=N)
resultButton = ttk.Button(root, text = 'Calculate',
# update result label with the returned result
command = lambda: mylabel.config(text=sl_adder(xxx.get(), yyy.get())))
resultButton.grid(column=3, row=2, pady=15, sticky=W)
close_window = ttk.Button(root, text="Destroy", command = root.destroy)
close_window.grid(column=3, row=3, pady=15, sticky=W)
# create the label for showing the result
mylabel = ttk.Label(root)
mylabel.grid(column=1, row=4, padx=10, pady=15, sticky=N)
root.mainloop()
模塊sl_adder
:
def sl_adder(aa, bb):
# return the result to caller
return float(aa) float(bb)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/490466.html
上一篇:按下按鈕時水平和硬幣增加