创建一个以适应顺序放置小部件的公式

问题描述 投票:0回答:0

我正在用 gui 写刽子手脚本。我写了一个公式来为游戏单词中的每个字母放置一个黑条,这是由输入字段给出的。这些栏以小部件的水平中间为中心。我的问题是编写一个可以制作标签的公式,以在黑线上方显示正确猜测的字母。

我尝试制作一个具有 1000x1 网格的框架,并将标签放在其中,这样它们就不会被网格中的其他小部件干扰。由于网格的长度与我尝试使用与黑条相同的公式的小部件相同,但它不适用于任何超过一个字母的单词。

这是我到目前为止写的剧本,还没有完成。我是 python 的新手,所以我们将不胜感激。 L 用作我的试用小部件,尝试使其与行中的第一个栏匹配。

from tkinter import *


#----------------------------------------------------GUI
root = Tk()
root.geometry('1000x800+250+50')
root.configure(bg="green")



canvas = Canvas(root, width=1000, height=600, bg="blue", highlightthickness=0)
canvas.grid(row=0, column=0, rowspan=600, columnspan=1000)

frame2 = Frame(width=1000, height=2, bg="black")
frame2.grid(row=470, column=0, columnspan=1000)

frame = Frame(width=1000, height=200, bg="green")
frame.grid(row=600, column=0, rowspan=200, columnspan=1000, sticky="nsew")


#ordning: Galge, pinne upp, pinne höger, stöd i hörn, rep, huvud, kropp, armar, ben
grass = canvas.create_rectangle(0,400,1000,600,outline="green", fill="green")
pic1 = canvas.create_line(400, 360, 400, 280, 600, 280, 600, 360, width=30, fill="#3C2A21")
hill = canvas.create_arc(200, 300, 800, 600, outline="green", extent=180, fill="green")
pic2 = canvas.create_line(500, 280, 500, 50, width=30, fill="#3C2A21")
pic3 = canvas.create_line(500, 65, 700, 65, width=30, fill="#3C2A21")
pic4 = canvas.create_line(500, 100, 550, 65, width=30, fill="#3C2A21")
pic5 = canvas.create_line(697, 80, 697, 120, width=5, fill="black")
pic6 = canvas.create_oval(717, 160, 677, 120, width=3, fill="black")
pic7 = canvas.create_line(697, 160, 697, 240, width=7, fill="black")
pic8 = canvas.create_line(680, 220, 697, 170, 714, 220, width=7)
pic9 = canvas.create_line(680, 300, 697, 240, 714, 300, width=7)

userInput = Entry()
userInput.grid(row=500, column=510)

def start():
    word = userInput.get()
    alphabetTest = 0
    for cha in word:
        if cha.isalpha() == False:
            alphabetTest = 1
        else:
            alphabetTest = alphabetTest
    if alphabetTest == 0:
        userInput.destroy()
        playButton.destroy()
        word.upper()
        wordlenght = 0
        wordlist = []
        for a in word:
            wordlist.append(a)
            wordlenght = wordlenght + 1
        label1 = Label(root, text=wordlist)
        label1.grid(row=680, column=510)
        blackBarStart = 500 - 20 * (wordlenght - 0.5)
        blackBarEnd = blackBarStart + 20
        print(blackBarStart)
        print(blackBarEnd)
        for b in wordlist:
            canvas.create_line(blackBarStart, 480, blackBarEnd, 480, width=3, fill="black")
            blackBarStart = blackBarStart + 40
            blackBarEnd = blackBarEnd + 40
        i = Label(frame2,width= 142, bg="green")
        i.grid(column=0, columnspan=1000)
        L = Label(frame2, text="L", width=1, height=1)
        L.grid(row=0, column=int(500 - 20*(wordlenght-0.5)))

        print(int(500 - 20 * (wordlenght - 0.5)))
    else:
        characterWarning = Label(root, text="Please only enter letters")
        characterWarning.grid(row=580, column=510)



playButton = Button(root, text="skriv ut", command=start)
playButton.grid(row=600, column=510)

root.mainloop()
python tkinter canvas geometry grid-layout
© www.soinside.com 2019 - 2024. All rights reserved.