簡體   English   中英

無法在Python Tkinter中使用連接字符串完全更新標簽

[英]Can't fully update label with concatenated strings in Python Tkinter

這是我從頭開始編寫的第一個Tkinter程序。 我已經完成了有關Tkinter的教程,但實際上仍然是它的新手。 謝謝你的耐心。

我正在為Tkinter中的學生創建一個“二進制幫助程序”,但是我對試圖連接字符串值以顯示在標簽中的部分感到困惑。 當我單擊“位”按鈕之一時,它將自動更新“開/關”圖像,在標簽中顯示“ 0”或“ 1”,在另一個標簽中顯示位值。 它可以正確地完成所有這些操作,但是當它還應該在不同標簽的頂部顯示“組合”二進制值時,一次將它們“切換”為“開”就可以了,但是當我“切換”它時off並且其他任何值都為'on'時,它在頂部顯示二進制值,因為它們都為'off'即'00000000'而不是實際的二進制值...

FIY:我知道我還沒有編碼'denary'值...在解決這個問題后,我會這樣做。

任何想法,建議或幫助,我們將不勝感激。

到目前為止,這是我的代碼...

#Binary Helper with OOP - edujo (11/04/2018)
#Version 6

from tkinter import *
from PIL import Image, ImageTk

tk = Tk()
tk.title("Binary Helper")
tk.configure(bg = "blue")
#Ensure that window can't be resized
tk.resizable(0,0)
#Place the window on top of all other windows
tk.wm_attributes("-topmost", 1)

#Images On/Off
on = "On.png"
off = "Off.png"

class Buttons():
    """Binary Helper"""

    def __init__(self, btnRow=1, btnColumn=1, bitVal="0", bitRow=1, bitColumn=1,
                 binVal="0", binRow=1, binColumn=1, imgFile=off, imgRow=8, imgColumn=1):

        self.btnRow = btnRow
        self.btnColumn = btnColumn
        self.bitVal = bitVal
        self.bitRow = bitRow
        self.bitColumn = bitColumn
        self.binVal = binVal
        self.binRow = binRow
        self.binColumn = binColumn
        self.imgFile = imgFile
        self.imgRow = imgRow
        self.imgColumn = imgColumn

    def switching(self, event):

        #Switching binVal 0/1
        if self.binVal == "1":
            self.binLbl.configure(text = "0")
            self.binVal = "0"
            self.imgFile = Image.open(off)
            self.imgFile = ImageTk.PhotoImage(self.imgFile)
            self.imgLbl = Label(tk,image = self.imgFile)
            self.imgLbl.image = self.imgFile
            self.imgLbl.grid(row = self.imgRow, column = self.imgColumn, pady=10)
        elif self.binVal == "0":
            self.binLbl.configure(text = "1")
            self.binVal = "1"
            self.imgFile = Image.open(on)
            self.imgFile = ImageTk.PhotoImage(self.imgFile)
            self.imgLbl = Label(tk,image = self.imgFile)
            self.imgLbl.image = self.imgFile
            self.imgLbl.grid(row = self.imgRow, column = self.imgColumn, pady=10)

        #Switching bitVal 0/bitVal
        if (self.bitVal == "128" or self.bitVal == "64" or self.bitVal == "32" or
            self.bitVal == "16" or self.bitVal == "8" or self.bitVal == "4" or
            self.bitVal == "2" or self.bitVal == "1"):
            self.bitLbl.configure(text = "0")
            self.bitVal = "0"
        elif self.bitVal == "0":
            if self.bitVal == btn128.bitVal:
                self.bitLbl.configure(text = "128")
                self.bitVal = "128"
            if self.bitVal == btn64.bitVal:
                self.bitLbl.configure(text = "64")
                self.bitVal = "64"
            if self.bitVal == btn32.bitVal:
                self.bitLbl.configure(text = "32")
                self.bitVal = "32"
            if self.bitVal == btn16.bitVal:
                self.bitLbl.configure(text = "16")
                self.bitVal = "16"
            if self.bitVal == btn8.bitVal:
                self.bitLbl.configure(text = "8")
                self.bitVal = "8"
            if self.bitVal == btn4.bitVal:
                self.bitLbl.configure(text = "4")
                self.bitVal = "4"
            if self.bitVal == btn2.bitVal:
                self.bitLbl.configure(text = "2")
                self.bitVal = "2"
            if self.bitVal == btn1.bitVal:
                self.bitLbl.configure(text = "1")
                self.bitVal = "1"

        #Calculating the binary value
        if self.binVal == btn128.binVal and self.binVal == "1":
            a = "1"
        else:
            a = "0"
        if self.binVal == btn64.binVal and self.binVal == "1":
            b = "1"
        else:
            b = "0"
        if self.binVal == btn32.binVal and self.binVal == "1":
            c = "1"
        else:
            c = "0"
        if self.binVal == btn16.binVal and self.binVal == "1":
            d = "1"
        else:
            d = "0"
        if self.binVal == btn8.binVal and self.binVal == "1":
            e = "1"
        else:
            e = "0"
        if self.binVal == btn4.binVal and self.binVal == "1":
            f = "1"
        else:
            f = "0"
        if self.binVal == btn2.binVal and self.binVal == "1":
            g = "1"
        else:
            g = "0"
        if self.binVal == btn1.binVal and self.binVal == "1":
            h = "1"
        else:
            h = "0"
        #Concatenate result
        binTotal = a+b+c+d+e+f+g+h
        binaryAnswerLbl.configure(text = binTotal)

    def createButtons(self):

        #Creating the Bit values
        self.bitLbl = Label(tk, text = self.bitVal, font = "Calibri 16", fg = "yellow", bg = "blue")
        self.bitLbl.grid(row = self.bitRow, column = self.bitColumn)

        #Creating the Binary on/off value
        self.binLbl = Label(tk, text = self.binVal, font = "Calibri 16", fg = "yellow", bg = "blue")
        self.binLbl.grid(row = self.binRow, column = self.binColumn)

        #Creating the On/Off images
        self.imgFile = Image.open(off)
        self.imgFile = ImageTk.PhotoImage(self.imgFile)
        self.imgLbl = Label(tk,image = self.imgFile)
        self.imgLbl.image = self.imgFile
        self.imgLbl.grid(row = self.imgRow, column = self.imgColumn, pady=10)

        #Creating the buttons
        self.btn = Button(tk,text = "On/Off")
        self.btn.bind("<Button-1>",self.switching)        
        self.btn.grid(row = self.btnRow, column = self.btnColumn)

#Creating Main Heading
headingLbl = Label(tk, text = "Binary Helper", width = 30, font = "Calibri 32", fg = "white", bg = "blue")
headingLbl.grid(columnspan = 10, pady = 1)

#Creating Space 1
spaceLbl = Label(tk, bg = "blue")
spaceLbl.grid(columnspan = 10)

#Creating the Binary labels in row 1
binaryLbl = Label(tk, text = "Binary:", font = "Calibri 16", fg = "white", bg = "blue")
binaryLbl.grid(row = 2, column = 1, columnspan = 2)
binaryAnswerLbl = Label(tk, text = "00000000", font = "Calibri 16", fg = "black", bg = "white")
binaryAnswerLbl.grid(row = 2, column = 2, columnspan = 3)

#Creating the Denary labels in row 1
varDenary = StringVar()
denaryLbl = Label(tk, text = "Denary:", font = "Calibri 16", fg = "white", bg = "blue")
denaryLbl.grid(row = 2, column = 6, columnspan = 2)
denaryAnswerLbl = Label(tk, textvariable = varDenary, font = "Calibri 16", fg = "black", bg = "white")
denaryAnswerLbl.grid(row = 2, column = 7, columnspan = 3)
varDenary.set("219")

#Creating Space 2
spaceLbl = Label(tk, bg = "blue")
spaceLbl.grid(columnspan = 10)

#Creating instances of the Button Class Object
btn128 = Buttons(10,1,"0",4,1,"0",6,1,off,8,1)
btn128.createButtons()
btn64 = Buttons(10,2,"0",4,2,"0",6,2,off,8,2)
btn64.createButtons()
btn32 = Buttons(10,3,"0",4,3,"0",6,3,off,8,3)
btn32.createButtons()
btn16 = Buttons(10,4,"0",4,4,"0",6,4,off,8,4)
btn16.createButtons()
btn8 = Buttons(10,5,"0",4,5,"0",6,5,off,8,5)
btn8.createButtons()
btn4 = Buttons(10,6,"0",4,6,"0",6,6,off,8,6)
btn4.createButtons()
btn2 = Buttons(10,7,"0",4,7,"0",6,7,off,8,7)
btn2.createButtons()
btn1 = Buttons(10,8,"0",4,8,"0",6,8,off,8,8)
btn1.createButtons()

#Creating Space 3
spaceLbl = Label(tk, bg = "blue")
spaceLbl.grid(columnspan = 10)

...這是2張圖片:

#Calculating the binary value下的if-else語句中,檢查每個if上是否self.binVal == "1" self.binVal為0時,所有條件變為Falseah全部變為零。 你應該檢查一下

但是您已經在binVal擁有了所有的1和0,那么為什么不將它們串聯起來呢?

binTotal = btn128.binVal + btn64.binVal + btn32.binVal + btn16.binVal + btn8.binVal + btn4.binVal + btn2.binVal + btn1.binVal
binaryAnswerLbl.configure(text = binTotal)

您可以為denaryLbl做類似的denaryLbl

decTotal = int(btn128.bitVal) + int(btn64.bitVal) + int(btn32.bitVal) + int(btn16.bitVal) + int(btn8.bitVal) + int(btn4.bitVal) + int(btn2.bitVal) + int(btn1.bitVal)
varDenary.set(str(decTotal))  


另外,您將大量數字存儲為字符串,這不一定是問題,但可能並不總是最直觀的(因此, "1"代替1"128"代替128 )。 此外,您將StingVar用於應顯示數字的標簽,為什么不使用IntVar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM