0

我是python和编程的初学者。我正在尝试为我的 tkinter 程序创建一个看起来像(有点!)的模板空窗口。

我有 2 个脚本。一个用于主程序,另一个用于所有功能。我的想法是将带有函数的脚本导入主脚本并使用模板。

我的主要脚本在这里(main.py):

import module1 as md1
import Tkinter as tk

main_sizex=1280
main_sizey=750
main_posx=1
main_posy=1
main_title="Hello! This is a test"
main_titlesize=22
root=tk.Tk()
md1.Drag_Window(root, main_sizex, main_sizey, main_posx, main_posy, main_title, main_titlesize)
root.mainloop()

我的其他带有函数的脚本(module1.py):

import Tkinter as tk
def Drag_Window(name,sizex,sizey,posx,posy,title,titlesize):
    def StartMove(event):
        global x,y
        x = event.x
        y = event.y
    def StopMove(event):
        x = None
        y = None
    def OnMotion(event):
        x1 = x
        y1 = y
        x2 = event.x
        y2 = event.y
        deltax = x2-x1
        deltay = y2-y1
        a = name.winfo_x() + deltax
        b = name.winfo_y() + deltay
        name.geometry("+%s+%s" % (a, b))

    name.overrideredirect(True)
    name.config(relief='solid',bd=1,bg='white')
    name.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))
    frame=tk.Frame(name,width=sizex,height=80,relief='solid',bd=1,bg='black')
    frame.place(x=0,y=0)
    frame.bind("<ButtonPress-1>",StartMove)
    frame.bind("<ButtonRelease-1>",StopMove)
    frame.bind("<B1-Motion>",OnMotion)
    label=tk.Label(frame,text=title,font=('calibri',(titlesize)),bg='black',fg='white')
    label.place(x=10,y=15)
    button=tk.Button(frame,text='EXIT',font=('calibri',(13)),bg='red',relief='flat',bd=1,width=8,pady=3,command=name.destroy)
    button.place(x=1170,y=20)
    frame2=tk.Frame(name,width=sizex,height=20,relief='solid',bd=1,bg='black')
    frame2.place(x=0,y=sizey-20)

我的问题是我需要更改一些属性,例如模板bgcolortext的一些标签小部件和按钮小部件。我知道我可以像这样在我的函数中添加我想要的附加属性

def Drag_Window(name,sizex,sizey,posx,posy,title,titlesize,propertyA,propertyB,...etc): 
........
........

但我想知道是否可以直接从我的主脚本访问小部件属性?反正我能做到吗?

像这样的东西:

import module1 as md1
import Tkinter as tk

main_sizex=1280
main_sizey=750
main_posx=1
main_posy=1
main_title="Hello! This is a test"
main_titlesize=22
root=tk.Tk()
md1.Drag_Window(root, main_sizex, main_sizey, main_posx, main_posy, main_title, main_titlesize)
md1.button.config(bg='green') # <=
root.mainloop() 
4

1 回答 1

1

使用

主文件

import Tkinter as tk

import module1 as md1


main_sizex = 1280
main_sizey = 750
main_posx = 1
main_posy = 1
main_title = "Hello! This is a test"
main_titlesize = 22
root = tk.Tk()
window = md1.Drag_Window(root, main_sizex, main_sizey, main_posx, main_posy, main_title, main_titlesize)
window.button.config(bg='green')
root.mainloop() 

模块1.py

import Tkinter as tk

class Drag_Window:
    def __init__(self, name, sizex, sizey, posx, posy, title, titlesize):
        self.name = name
        name.overrideredirect(True)
        name.config(relief='solid', bd=1, bg='white')
        name.wm_geometry("%dx%d+%d+%d" % (sizex,  sizey,  posx,  posy))
        frame = tk.Frame(name, width=sizex, height=80, relief='solid', bd=1, bg='black')
        frame.place(x=0, y=0)
        frame.bind("<ButtonPress-1>", self.StartMove)
        frame.bind("<ButtonRelease-1>", self.StopMove)
        frame.bind("<B1-Motion>", self.OnMotion)
        label = tk.Label(frame, text=title, font=('calibri', titlesize), bg='black', fg='white')
        label.place(x=10, y=15)
        self.button = tk.Button(frame, text='EXIT', font=('calibri', 13), bg='red', relief='flat', bd=1, width=8, pady=3, command=name.destroy)
        self.button.place(x=1170, y=20)
        frame2 = tk.Frame(name, width=sizex, height=20, relief='solid', bd=1, bg='black')
        frame2.place(x=0, y=sizey-20)

    def StartMove(self, event):
        self.x = event.x
        self.y = event.y

    def StopMove(self, event):
        self.x = None
        self.y = None

    def OnMotion(self, event):
        x1 = self.x
        y1 = self.y
        x2 = event.x
        y2 = event.y
        deltax = x2 - x1
        deltay = y2 - y1
        a = self.name.winfo_x() + deltax
        b = self.name.winfo_y() + deltay
        self.name.geometry("+%s+%s" % (a, b))

另一种方式(不推荐) - 在 Drag_Window() 函数中将小部件公开为全局变量。

def Drag_Window(root, ....):
    global button
    ....
    button = Button(....)
于 2013-06-14T17:58:09.063 回答