我肯定會誤解與包和網格的東西... 我正在製作一個python應用程序的GUI,它可以在多個終端類控制檯中獲取調試消息。製作Tkinter GUI的新功能Tkinter網格框架被垂直堆疊,而不是水平網格
首先,爲什麼我需要打包buttonframe才能顯示它?不應該相當於包裝?
GUI由按鈕框頂部的一系列按鈕和一系列垂直控制檯組成,並以列的形式顯示。相反,我得到的是所有控制檯垂直堆疊。
控制檯是帶有文本的框架,其中的文本由應用程序中的其他線程編寫。
如果我不控制控制檯[idx],它不會改變(所以我認爲它不起作用)。如果我不包裝控制檯[idx],GUI將開始閃爍。
請注意,如果我改爲調用create_Hterms,而不是垂直堆疊一堆水平控制檯。
如何正確地將我的控制檯放置爲垂直列?
import Tkinter as tikei
NCONSOLES = 4
HORZ_CONSOLE_W = 10
HORZ_CONSOLE_H = 12
# FakeConsole: one of the consoles that are spawned by MainWindow.
class FakeConsole(tikei.Frame): # from Kevin in http://stackoverflow.com/questions/19479504/how-can-i-open-two-consoles-from-a-single-script
def __init__(self, root, cust_width, cust_height, *args, **kargs):
tikei.Frame.__init__(self, root, *args, **kargs)
self.grid(row=0)
#white text on black background
self.text = tikei.Text(root, bg="black", fg="white", width=cust_width, height=cust_height)
self.text.grid(row=0)
self.text.insert(tikei.END, 'ASD')
self.text.see(tikei.END)
def clearConsole(self):
self.text.delete(1.0,tikei.END)
class MainWindow(tikei.Frame):
counter = 0
consoles = []
consoleFormat = ''
e_Vvar = ''
e_Hvar = ''
var1 = ''
ctrlCmdRecipient = ''
def __init__(self, *args, **kwargs):
tikei.Frame.__init__(self, *args, **kwargs)
self.consoleFormat = 'H'
self.cF = tikei.StringVar()
self.grid(row=0)
self.buttonframe = tikei.Frame(self)
self.buttonframe.grid(row=0)
tikei.Button(self.buttonframe, text = "Clear Consoles", command=self.clearConsoles).grid(row=0, column=0)
tikei.Button(self.buttonframe, text = "start").grid(row=0, column=1)
tikei.Button(self.buttonframe, text = "stop").grid(row=0, column=2)
self.consoleFrame = tikei.Frame(self)
self.create_Hterms()
self.consoleFrame.grid(row=1)
# create a status bar
self.statusTxt = tikei.StringVar()
self.statusTxt.set('-')
self.statusLab = tikei.Label(self.buttonframe, text="Status: ", anchor=tikei.W, height=1).grid(row=1, column=0, sticky=tikei.W)
self.statusBar = tikei.Label(self.buttonframe, textvariable=self.statusTxt, anchor=tikei.W, height=1).grid(row=1, column=1, columnspan=4, sticky=tikei.W)
def clearConsoles(self):
for i in range(NCONSOLES):
self.consoles[i].clearConsole()
def create_Hterms(self):
ctr = NCONSOLES
idx = 0
cons_w = HORZ_CONSOLE_W
cons_h = HORZ_CONSOLE_H
while ctr > 0:
self.consoles.append(FakeConsole(self.consoleFrame, cons_w, cons_h)) #
self.consoles[idx].grid(row=idx+1, column=0)
ctr -= 1
idx += 1
return idx+1
root = tikei.Tk()
mainTk = MainWindow(root)
root.wm_title("TOOLS")
mainTk.grid(row=0)
root.mainloop()
我在運行代碼時遇到了一些麻煩。 indentation不正確,第3行的'self'未定義,'def create_Vterms()'後面沒有冒號,並且缺少self參數,'self.clearConsoles'不存在,'NCONSOLES'和' VERT_CONSOLE_W'和'VERT_CONSOLE_H'沒有定義,並且使用了'threading'但是沒有被導入。請[提供代碼](http://sscce.org/),可以複製並粘貼並運行,這表現了您的問題。 – Kevin
不要在同一個元素上使用'pack()'和'grid()'! 'pack()'和'grid()'是互斥的。 – furas
您有相當多的語法缺陷。這不可能是你的實際代碼。你可以給我們的代碼運行嗎? –