[英]What am I doing wrong with the variables?
我想做一個小程序來改變句子的大小寫,讓它們聽起來很諷刺。 我想把它放在一個小框架中並使用本教程( https://datatofish.com/entry-box-tkinter/ )。 我已經提取了它的一些代碼並實現了它,但我認為我搞砸了。
Shell 經常給我關於缺少變量的錯誤,我似乎在代碼中找不到。 你們中的一些人能找到我犯錯的地方嗎?
import random
import tkinter as tk
root= tk.Tk()
root.title('hOofDleTteRdiNGes')
canvas1 = tk.Canvas(root, width = 400, height = 300)
canvas1.pack()
entry1 = tk.Entry (root)
canvas1.create_window(200, 140, window=entry1)
def capi_sentence(sentence):
sentence.lower = entry1.get()
new_sentence = ''
number = 0 #Dummy number for tracking
for letter in sentence.lower():
if len(new_sentence)<2: #Creates the first two letter
random_number = random.randint(0,1) #This randomly decides if the letter should be upper or lowercase
if random_number==0:
new_sentence += letter.upper()
else:
new_sentence += letter
else:
if (new_sentence[number-2].isupper() and new_sentence[number-1].isupper() or new_sentence[number-2].islower() and new_sentence[number-1].islower())==True:
#Checks if the two letters before are both upper or lowercase
if new_sentence[number-1].isupper(): #Makes the next letter the opposite of the letter before
new_sentence += letter.lower()
else:
new_sentence += letter.upper()
else:
random_number = random.randint(0,1)
if random_number==0:
new_sentence += letter.upper()
else:
new_sentence += letter
number += 1 #Add one more to the tracking
label1 = tk.label(new_sentence)
button1 = tk.Button(text='hoofdletter shufflen', command=capi_sentence)
canvas1.create_window(200, 180, window=button1)
你有幾個問題。
您需要在最后調用root.mainloop()
以便出現 window 。
您的capi_sentence
function 接受一個參數,但按下按鈕時調用的回調沒有給它一個參數。
利用
button1 = tk.Button(text='hoofdletter shufflen', command=lambda: capi_sentence(entry1.get()))
它使用entry1.get()
的返回值調用您的 function 。
在正確傳遞文本后,第一行 capi_sentence 是不必要的(無論如何也沒有任何意義)。
您在創建label
時使用了小寫 label。 您還需要傳入一個父窗口小部件(例如 root)並將文本作為text
關鍵字參數傳入。 最后,需要通過打包的方式將其添加到 window 中。
label1 = tk.Label(root, text=new_sentence)
label1.pack()
一些雜項提示:
你不需要== True
在你的條件結束; 如果為真,if 將已經運行。
您可以使用enumerate
刪除顯式number
邏輯,它返回一個元組列表 (i, item),其中 item 是列表中的原始項目,i 它的索引從 0 到 N - 1。我在下面重寫了你的 for 循環有了這個(和其他簡化),所以它更容易閱讀。
for i, letter in enumerate(sentence.lower()):
maybe_upper = letter.upper() if random.randint(0, 1) else letter
if len(new_sentence) < 2: #Creates the first two letter
new_sentence += maybe_upper
else:
l2, l1 = new_sentence[i - 2 : i]
if (l1.isupper() and l2.isupper()) or (l1.islower() and l2.islower()):
#Checks if the two letters before are both upper or lowercase
new_sentence += letter.lower() if l1.isupper() else letter.upper()
else:
new_sentence += maybe_upper
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.