from tkinter import *
root = Tk()
def main():
Window1 = Window(root, "hello", "500x500",)
class Window:
def __init__(self, root, title, geometry,):
self.root = root
root.title(title)
root.geometry(geometry)
root.mainloop()
class Button(Window):
def __init__(self, message):
self.message = message
super().__init__(root,)
Button(root, text=message,).pack()
root.mainloop()
Button("HI")
main()
uj5u.com熱心網友回復:
我看到的兩個主要問題之一是您的Button類隱藏了一個tkinter定義的同名,而該同名可以通過from tkinter import *. 第二個是你Button不應該從你的Window類派生,因為子類化意味著兩個類之間存在“是一種”關系——這顯然不是它們的情況。
下面是一種面向物件的方式來做有效的事情:
import tkinter as tk # PEP 8 recommends avoiding `import *`
def main():
root = tk.Tk()
window1 = Window(root, "hello", "500x500")
Button(root, "HI")
root.mainloop()
class Window:
def __init__(self, root, title, geometry):
self.root = root
root.title(title)
root.geometry(geometry)
class Button:
def __init__(self, parent, message):
self.message = message
tk.Button(parent, text=message).pack()
if __name__ == '__main__':
main()
uj5u.com熱心網友回復:
有幾個問題。
首先,您正在創建一個名為“Button”的 Window 子類。當您子類化某些東西時,這意味著它將與它的父物件具有相似的型別(Window!= Button)。但更重要的是,當你定義 Button 時,你實際上隱藏了 tkinter 的按鈕!
其次,您需要考慮事件回圈。使用 GUI 時,您希望在運行主回圈(如果可能)之前設定所有內容(按鈕在哪里,表單元素在哪里等)。你在每個元素中呼叫 root.mainloop 函式,而你應該只呼叫一次(并且可能在你的 main() 方法中)。
那么實際該怎么做呢?你的代碼可能看起來像這樣
from tkinter import *
class Window:
def __init__(self, root, title, geometry, ):
self.root = root
root.title(title)
root.geometry(geometry)
def add_button(self, label):
btn = Button(self.root, text=label)
btn.pack(side='top')
def main():
root = Tk()
Window1 = Window(root, "hello", "500x500", )
Window1.add_button("Hi!")
root.mainloop()
if __name__ == "__main__":
main()
在這里,視窗有一個名為“add_button”的方法,您可以在其中添加您想要的任何按鈕。請注意,它只是創建一個新的 Button 物件(父物件是“root”),然后“打包”它(請隨意閱讀有關 tk 布局的更多資訊),將其放置在它的位置
我還清理了 main 函式,并在經典的 'if name == " main ":' 行下呼叫它。
uj5u.com熱心網友回復:
import tkinter as tk
def main():
root = tk.Tk()
window1 = Window(root, "hello", "500x500")
Button(root, "Click me", 2, 2, 10, 5)
root.mainloop()
class Window:
def __init__(self, root, title, geometry):
self.root = root
root.title(title)
root.geometry(geometry)
class Button:
def __init__(self, parent, message, row, column, width, height,):
self.message = message
self.row = row
self.column = column
self.width = width
self.height = height
tk.Button(parent, text=message, height=height, width=width).grid(column=column, row=row)
if __name__ == '__main__':
main()
網格功能現在不作業了大聲笑
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/427104.html
上一篇:如何自行呼叫tkinter按鈕?
