精华内容
下载资源
问答
  • ui的设计,控件id的记录是一件比较繁琐的事情。 此外,赋值和读取数据也比较繁琐,非常不pythonic。 有没有神马办法优雅一点呢?life is short。 鉴于控件有name属性,通过dir(Entry_obj)得知,存放在一个_name...

    ui的设计,控件id的记录是一件比较繁琐的事情。

    此外,赋值和读取数据也比较繁琐,非常不pythonic。

    有没有神马办法优雅一点呢?life is short。

     

    鉴于控件有name属性,通过dir(Entry_obj)得知,存放在一个_name的属性里面。于是就有了以下代码:

    Entry(frame,name='your_id1').grid(row=x1,column=y1)
    Entry(frame,name='your_id2').grid(row=x2,column=y2)
    ...
    Entry(frame, name='your_idn').grid(row=xn,column=yn)
    

    当然还有其他输入控件,此处略。

    可以通过 frame.grid_slaves()得到其上面所有的控件。

    然后可以通过 __class__来判断具体类型。可以在此基础上判断哪些控件是输入控件,如下:

    for ctrl in frame.grid_slaves():
        if ctrl.__class__.__name__ in ('Entry','Text',....):
            return True
    return False
    

      

    此外,我们还需要一个映射表,来关联界面控件和我们的模型。

    mapper={'model_attr1':ctrol_id1, 'model_attr2':ctrol_id2,...., 'model_attrn':ctrol_idn}

     

    通过这个映射表,我们可以方便的进行表单数据的设置和读取,假设所有输入控件皆为Entry,于是就有了一下读取表单的代码:

        def get_form_data(self):
            vals = {}.fromkeys(self.mapper.keys(),False)
            ctrls = dict([(x._name,x) for x in self.input_ctrls])
            for k,v in self.mapper.items():
                ctrl = ctrls.get(v,False)
                if ctrl and ctrl.get():
                    vals.update({k:ctrl.get()})
                    #print vals
            logging.debug('product form data:%s'%vals)
            return vals
    

     

    关于input_ctrls的说明,因为控件的从属关系,本质上应该是一个树。

    可以采用一个设计:

    将控件放入到frame中,所有的frame放入到一个列表中frame_list。

    frame中的控件用grid方式布局。于是就有了以下读取界面上所有输入控件的代码:

        def _is_input(self, ctrl_obj):
            """
            是否为输入控件
            :param ctrl_obj:
            :return:
            """
            if ctrl_obj:
                name = ctrl_obj._name
                matches= ['txt_','cb_']
                if (name.split('_')[0]+'_') in matches:
                    return True
            return False
    
        def _get_input_ctrls(self, container):
            if container:
                cs = container.grid_slaves()
                cs.extend(container.pack_slaves())
                for c in cs:
                    if self._is_input(c):
                        self.input_ctrls.append(c)
                    else:
                        self._get_input_ctrls(c)
    
        def get_input_ctrls(self):
            self.input_ctrls=[]
            for f in self.frames:
                self._get_input_ctrls(f)
            return self.input_ctrls
    

     是否输入控件采用了根据_name属性进行的判断。此处需要有coding规范约束。

    实际上可以改写_is_input逻辑,根据__class__来进行枚举判断。

     

    相应的设置表单的值逻辑如下:

        def set_data(self, data):
            if not isinstance(data,dict):
                raise TypeError
            if not self.mapper:
                raise "set_mapper method must be called before this method being called."
            ctrls = dict([(x._name,x) for x in self.get_input_ctrls()])
            for k,v in self.mapper.items():
                if True:#data.get(k,None) is not None:
                    ctrl_obj = ctrls.get(v)
                    if ctrl_obj:
                        state = ctrl_obj['state']
                        ctrl_obj.configure(state='normal')
                        if isinstance(ctrl_obj,NewCBtn):
                            ctrl_obj.checked(data.get(k))
                        elif isinstance(ctrl_obj,NewCBox):
                            vals = data.get(k)
                            if isinstance(vals,(list,tuple)):
                                val= vals[-1]
                                if not ctrl_obj.dictionary:
                                    t={vals[-1]:vals[0]}
                                    ctrl_obj.set_dict(t)
                                ctrl_obj.set(val)
                            else:
                                ctrl_obj.value(vals)
                        elif isinstance(ctrl_obj,NewImage):
                            ctrl_obj.Image(data.get(k))
                        elif isinstance(ctrl_obj,Text):
                            ctrl_obj.delete("1.0",END)
                            ctrl_obj.insert("1.0",data.get(k))
                        elif isinstance(ctrl_obj,Entry):
                            ctrl_obj.delete(0,END)
                            ctrl_obj.insert(0, str(data.get(k) or ''))
                        else:
                            logging.warning('unkown control type object:%s'%ctrl_obj.__class__.__name__)
    
                        ctrl_obj.configure(state=state)

     

    其中,类Newxxx为自己定义的类:

    NewCBox

    class NewCBox(ttk.Combobox):
        def __init__(self, master, dictionary={}, *args, **kw):
            if not kw:kw={'values':sorted(list(dictionary.keys()))}
            else:kw.update({'values':sorted(list(dictionary.keys()))})
            ttk.Combobox.__init__(self, master, *args,  **kw)
            self.dictionary = dictionary
            #self.bind('<<ComboboxSelected>>', self.selected) #purely for testing purposes
            self.bind('<Control-a>', self.select_all_input)
    
        def select_all_input(self,event):
            #选择输入文本,不起作用
            #print 'Ctrl+A'
            text = self.get()
            vals = self.cget('values')
            for i in range(len(vals)):
                if vals[i]==text:
                    self.current(i)
    
        def set_dict(self, dictionary):
            self.dictionary=dictionary
            self['values']= sorted(list(dictionary.keys()))
    
        def value(self,new_val=None):
            if new_val is None:
                key = self.get()
                d= self.dictionary
                k1=key.encode('UTF-8')#ASCII码就是UTF-8编码的最少字节的版本
                k2=key.encode('GB2312')
                k3=key.encode('CP936')
                return d.get(key,d.get(k1,d.get(k2,d.get(k3,False))))else:
                for k,v in self.dictionary.items():
                    if str(new_val)==str(v):
                        self.set(k)
                        return k
        # def selected(self, event): #Just to test
        #     print(self.value())

    NewImage

    import io
    class NewImage(Label):
        def __init__(self, master=None,image_path=r'nullImage.png', cnf={}, **kw):
            image = Image.open(image_path)
            self.default_image = ImageTk.PhotoImage(image)
            self.current_image = self.default_image
            Label.__init__(self, image=self.current_image, master=master, cnf=cnf,**kw)
    
        def Image(self,base64_source=None,encoding='base64'):
            if not base64_source is None:
                if base64_source:
                    base64_source = resize_img(base64_source,size=(100,100))
                    image_stream = io.BytesIO(base64_source.decode(encoding))
                    image = Image.open(image_stream)
                    self.current_image =ImageTk.PhotoImage(image)#PhotoImage(file='pro.gif')# PhotoImage(data=background_stream.getvalue())
                    self['image']=self.current_image
                else:
                    self['image']=self.default_image
            return self['image']

     

    NewCBtn

    class NewCBtn(Checkbutton):
        def __init__(self, master,*args, **kw):
            self.value = IntVar()
            if not kw:kw={'variable':self.value}
            else:kw.update({'variable':self.value})
            Checkbutton.__init__(self,master,*args,**kw)
    
        def checked(self,value=None):
            if value is not None:
                self.value.set(value and 1 or 0)
            return self.value.get()

     

    转载于:https://www.cnblogs.com/Tommy-Yu/p/4179040.html

    展开全文
  • 这是一个VB6的ADDIN(外接程序),用于使用VB6开发工具直接拖放控件,直接可视化完成Python的TKinter的GUI布局和设计,可以在VB界面上设置 控件的一些属性,最终自动生成必要的代码(包括回调函数框架),代码生成...
  • 这是Python代码,关于Tkinter图形界面的一些简单的例子,还包括猜数字游戏和模拟计算器界面的简单实现。
  • 类似qt designer或者vb,可以在页面上拖拖画画,绑定属性和事件,就可以生成tkInter界面的python代码的工具 需要依赖python 2.7/3.5+,ActiveTcl 8.6+以上。如启动时提醒找不到wish.exe,请将ActiveTcl的可执行文件...
  • ui的设计,控件id的记录是一件比较繁琐的事情。此外,赋值和读取数据也比较繁琐,非常不pythonic。有没有神马办法优雅一点呢?life is short。鉴于控件有name属性,通过dir(Entry_obj)得知,存放在一个_name的属性...

    ui的设计,控件id的记录是一件比较繁琐的事情。

    此外,赋值和读取数据也比较繁琐,非常不pythonic。

    有没有神马办法优雅一点呢?life is short。

    鉴于控件有name属性,通过dir(Entry_obj)得知,存放在一个_name的属性里面。于是就有了以下代码:

    Entry(frame,name='your_id1').grid(row=x1,column=y1)

    Entry(frame,name='your_id2').grid(row=x2,column=y2)

    ...

    Entry(frame, name='your_idn').grid(row=xn,column=yn)

    当然还有其他输入控件,此处略。

    可以通过 frame.grid_slaves()得到其上面所有的控件。

    然后可以通过 __class__来判断具体类型。可以在此基础上判断哪些控件是输入控件,如下:

    for ctrl in frame.grid_slaves():

    if ctrl.__class__.__name__ in ('Entry','Text',....):

    return True

    return False

    此外,我们还需要一个映射表,来关联界面控件和我们的模型。

    mapper={'model_attr1':ctrol_id1, 'model_attr2':ctrol_id2,...., 'model_attrn':ctrol_idn}

    通过这个映射表,我们可以方便的进行表单数据的设置和读取,假设所有输入控件皆为Entry,于是就有了一下读取表单的代码:

    def get_form_data(self):

    vals = {}.fromkeys(self.mapper.keys(),False)

    ctrls = dict([(x._name,x) for x in self.input_ctrls])

    for k,v in self.mapper.items():

    ctrl = ctrls.get(v,False)

    if ctrl and ctrl.get():

    vals.update({k:ctrl.get()})

    #print vals

    logging.debug('product form data:%s'%vals)

    return vals

    关于input_ctrls的说明,因为控件的从属关系,本质上应该是一个树。

    可以采用一个设计:

    将控件放入到frame中,所有的frame放入到一个列表中frame_list。

    frame中的控件用grid方式布局。于是就有了以下读取界面上所有输入控件的代码:

    def _is_input(self, ctrl_obj):

    """

    是否为输入控件

    :param ctrl_obj:

    :return:

    """

    if ctrl_obj:

    name = ctrl_obj._name

    matches= ['txt_','cb_']

    if (name.split('_')[0]+'_') in matches:

    return True

    return False

    def _get_input_ctrls(self, container):

    if container:

    cs = container.grid_slaves()

    cs.extend(container.pack_slaves())

    for c in cs:

    if self._is_input(c):

    self.input_ctrls.append(c)

    else:

    self._get_input_ctrls(c)

    def get_input_ctrls(self):

    self.input_ctrls=[]

    for f in self.frames:

    self._get_input_ctrls(f)

    return self.input_ctrls

    是否输入控件采用了根据_name属性进行的判断。此处需要有coding规范约束。

    实际上可以改写_is_input逻辑,根据__class__来进行枚举判断。

    相应的设置表单的值逻辑如下:

    def set_data(self, data):ifnot isinstance(data,dict):

    raise TypeErrorifnot self.mapper:

    raise"set_mapper method must be called before this method being called."ctrls= dict([(x._name,x) for x inself.get_input_ctrls()])for k,v inself.mapper.items():if True:#data.get(k,None) isnot None:

    ctrl_obj= ctrls.get(v)ifctrl_obj:

    state= ctrl_obj['state']

    ctrl_obj.configure(state='normal')ifisinstance(ctrl_obj,NewCBtn):

    ctrl_obj.checked(data.get(k))

    elif isinstance(ctrl_obj,NewCBox):

    vals= data.get(k)ifisinstance(vals,(list,tuple)):

    val= vals[-1]ifnot ctrl_obj.dictionary:

    t={vals[-1]:vals[0]}

    ctrl_obj.set_dict(t)

    ctrl_obj.set(val)else:

    ctrl_obj.value(vals)

    elif isinstance(ctrl_obj,NewImage):

    ctrl_obj.Image(data.get(k))

    elif isinstance(ctrl_obj,Text):

    ctrl_obj.delete("1.0",END)

    ctrl_obj.insert("1.0",data.get(k))

    elif isinstance(ctrl_obj,Entry):

    ctrl_obj.delete(0,END)

    ctrl_obj.insert(0, str(data.get(k) or ''))else:

    logging.warning('unkown control type object:%s'%ctrl_obj.__class__.__name__)

    ctrl_obj.configure(state=state)

    其中,类Newxxx为自己定义的类:

    NewCBox

    classNewCBox(ttk.Combobox):

    def __init__(self, master, dictionary={}, *args, **kw):if not kw:kw={'values':sorted(list(dictionary.keys()))}else:kw.update({'values':sorted(list(dictionary.keys()))})

    ttk.Combobox.__init__(self, master,*args, **kw)

    self.dictionary=dictionary

    #self.bind('<>', self.selected) #purely fortesting purposes

    self.bind('', self.select_all_input)

    def select_all_input(self,event):

    #选择输入文本,不起作用

    #print'Ctrl+A'text= self.get()

    vals= self.cget('values')for i inrange(len(vals)):if vals[i]==text:

    self.current(i)

    def set_dict(self, dictionary):

    self.dictionary=dictionary

    self['values']=sorted(list(dictionary.keys()))

    def value(self,new_val=None):if new_val isNone:

    key= self.get()

    d=self.dictionary

    k1=key.encode('UTF-8')#ASCII码就是UTF-8编码的最少字节的版本

    k2=key.encode('GB2312')

    k3=key.encode('CP936')return d.get(key,d.get(k1,d.get(k2,d.get(k3,False))))else:for k,v inself.dictionary.items():if str(new_val)==str(v):

    self.set(k)returnk

    # def selected(self,event): #Just to test

    # print(self.value())

    NewImage

    importioclassNewImage(Label):def __init__(self, master=None,image_path=r'nullImage.png', cnf={}, **kw):

    image=Image.open(image_path)

    self.default_image=ImageTk.PhotoImage(image)

    self.current_image=self.default_image

    Label.__init__(self, image=self.current_image, master=master, cnf=cnf,**kw)def Image(self,base64_source=None,encoding='base64'):if not base64_source isNone:ifbase64_source:

    base64_source= resize_img(base64_source,size=(100,100))

    image_stream=io.BytesIO(base64_source.decode(encoding))

    image=Image.open(image_stream)

    self.current_image=ImageTk.PhotoImage(image)#PhotoImage(file='pro.gif')# PhotoImage(data=background_stream.getvalue())

    self['image']=self.current_imageelse:

    self['image']=self.default_imagereturn self['image']

    NewCBtn

    classNewCBtn(Checkbutton):def __init__(self, master,*args, **kw):

    self.value=IntVar()if not kw:kw={'variable':self.value}else:kw.update({'variable':self.value})

    Checkbutton.__init__(self,master,*args,**kw)def checked(self,value=None):if value is notNone:

    self.value.set(valueand 1 or0)return self.value.get()

    展开全文
  • Tkinter登陆界面设计

    千次阅读 2019-05-07 21:51:54
    Tkinter登陆界面设计 程序详细解释可参考莫凡:https://morvanzhou.github.io/tutorials/python-basic/tkinter/3-03-example3/ 注意,可在源程序的基础上进行添加自己的程序。 程序运行结果: 程序代码: # -*- ...

    Tkinter登陆界面设计

    程序详细解释可参考莫凡:https://morvanzhou.github.io/tutorials/python-basic/tkinter/3-03-example3/

    注意,可在源程序的基础上进行添加自己的程序。
    程序运行结果:

    在这里插入图片描述
    程序代码:

    # -*- coding: utf-8 -*-
    """
    Created on Sun Aug  5 10:34:10 2018
    @author: Administrator
    """
    import tkinter as tk
    import tkinter.messagebox
    import pickle
    
    # 窗口
    window = tk.Tk()
    window.title('欢迎进入学习系统')
    window.geometry('450x300')
    # 画布放置图片
    canvas = tk.Canvas(window, height=300, width=500)
    imagefile = tk.PhotoImage(file='qm.png')
    image = canvas.create_image(0, 0, anchor='nw', image=imagefile)
    canvas.pack(side='top')
    # 标签 用户名密码
    tk.Label(window, text='用户名:').place(x=100, y=150)
    tk.Label(window, text='密码:').place(x=100, y=190)
    # 用户名输入框
    var_usr_name = tk.StringVar()
    entry_usr_name = tk.Entry(window, textvariable=var_usr_name)
    entry_usr_name.place(x=160, y=150)
    # 密码输入框
    var_usr_pwd = tk.StringVar()
    entry_usr_pwd = tk.Entry(window, textvariable=var_usr_pwd, show='*')
    entry_usr_pwd.place(x=160, y=190)
    
    
    # 登录函数
    def usr_log_in():
        # 输入框获取用户名密码
        usr_name = var_usr_name.get()
        usr_pwd = var_usr_pwd.get()
        # 从本地字典获取用户信息,如果没有则新建本地数据库
        try:
            with open('usr_info.pickle', 'rb') as usr_file:
                usrs_info = pickle.load(usr_file)
        except FileNotFoundError:
            with open('usr_info.pickle', 'wb') as usr_file:
                usrs_info = {'admin': 'admin'}
                pickle.dump(usrs_info, usr_file)
        # 判断用户名和密码是否匹配
        if usr_name in usrs_info:
            if usr_pwd == usrs_info[usr_name]:
                tk.messagebox.showinfo(title='welcome',message='欢迎您:' + usr_name)
                #window.destroy()
                info_o = tk.Toplevel(window)
                info_o.geometry('350x200')
                info_o.title('注册')
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
            else:
                tk.messagebox.showerror(message='密码错误')
        # 用户名密码不能为空
        elif usr_name == '' or usr_pwd == '':
            tk.messagebox.showerror(message='用户名或密码为空')
        # 不在数据库中弹出是否注册的框
        else:
            is_signup = tk.messagebox.askyesno('欢迎', '您还没有注册,是否现在注册')
            if is_signup:
                usr_sign_up()
    
    
    # 注册函数
    def usr_sign_up():
        # 确认注册时的相应函数
        def signtowcg():
            # 获取输入框内的内容
            nn = new_name.get()
            np = new_pwd.get()
            npf = new_pwd_confirm.get()
    
            # 本地加载已有用户信息,如果没有则已有用户信息为空
            try:
                with open('usr_info.pickle', 'rb') as usr_file:
                    exist_usr_info = pickle.load(usr_file)
            except FileNotFoundError:
                exist_usr_info = {}
    
                # 检查用户名存在、密码为空、密码前后不一致
            if nn in exist_usr_info:
                tk.messagebox.showerror('错误', '用户名已存在')
            elif np == '' or nn == '':
                tk.messagebox.showerror('错误', '用户名或密码为空')
            elif np != npf:
                tk.messagebox.showerror('错误', '密码前后不一致')
            # 注册信息没有问题则将用户名密码写入数据库
            else:
                exist_usr_info[nn] = np
                with open('usr_info.pickle', 'wb') as usr_file:
                    pickle.dump(exist_usr_info, usr_file)
                tk.messagebox.showinfo('欢迎', '注册成功')
                # 注册成功关闭注册框
                window_sign_up.destroy()
    
        # 新建注册界面
        window_sign_up = tk.Toplevel(window)
        window_sign_up.geometry('350x200')
        window_sign_up.title('注册')
        # 用户名变量及标签、输入框
        new_name = tk.StringVar()
        tk.Label(window_sign_up, text='用户名:').place(x=10, y=10)
        tk.Entry(window_sign_up, textvariable=new_name).place(x=150, y=10)
        # 密码变量及标签、输入框
        new_pwd = tk.StringVar()
        tk.Label(window_sign_up, text='请输入密码:').place(x=10, y=50)
        tk.Entry(window_sign_up, textvariable=new_pwd, show='*').place(x=150, y=50)
        # 重复密码变量及标签、输入框
        new_pwd_confirm = tk.StringVar()
        tk.Label(window_sign_up, text='请再次输入密码:').place(x=10, y=90)
        tk.Entry(window_sign_up, textvariable=new_pwd_confirm, show='*').place(x=150, y=90)
        # 确认注册按钮及位置
        bt_confirm_sign_up = tk.Button(window_sign_up, text='确认注册',
                                       command=signtowcg)
        bt_confirm_sign_up.place(x=150, y=130)
    
    
    # 退出的函数
    def usr_sign_quit():
        window.destroy()
    
    
    # 登录 注册按钮
    bt_login = tk.Button(window, text='登录', command=usr_log_in)
    bt_login.place(x=140, y=230)
    bt_logup = tk.Button(window, text='注册', command=usr_sign_up)
    bt_logup.place(x=210, y=230)
    bt_logquit = tk.Button(window, text='退出', command=usr_sign_quit)
    bt_logquit.place(x=280, y=230)
    # 主循环
    window.mainloop()
    
    展开全文
  • 我在一开始的时候不知道tkinter可以直接用一个可视化的界面来进行界面设计,当时是直接用代码来生成窗口、设计控件,再设计功能,感觉效率不是很高。因此我觉得要想做GUI提高效率还是需要用到可视化界面来拖放控件...

    如果没有时间仔细看完这篇文章的话可以现在下载PAGE+TCL然后直接输入最后代码运行程序即可。
    python可以使用tkinter库来实现小程序制作,还是很方便的,比较大型程序可以采用pyqt来制作GUI。
    我在一开始的时候不知道tkinter可以直接用一个可视化的界面来进行界面设计,当时是直接用代码来生成窗口、设计控件,再设计功能,感觉效率不是很高。因此我觉得要想做GUI提高效率还是需要用到可视化界面来拖放控件快速生成一个窗口来供我们设计代码,这样既直观,还比较爽。

    要想实现这点的第一步方法是下载两个软件,一个是支持库Tcl,一个是GUI设计软件PAGE。下载完这两个软件之后就可以进行空间拖放来制作GUI。
    PAGE
    http://page.sourceforge.net/
    Tcl(8.6+)
    https://www.activestate.com/activetcl/downloads
    下载安装完后打开软件如下图

    在这里插入图片描述
    之后随便设计一个窗口来测试。

    在这里插入图片描述
    点击Gen_python->Generate Python GUI来生成代码。注意到直接生成的代码是不能用的。需要修改掉一些没用的代码。

    这里需要把与_support有关的代码全部删除,把下面这些代码删除,注意到里面有1_support这个是不能用的代码,1_support是我的文件名为1.py所以软件自动生成的代码为1_support。这个是不能用的代码。

    所以要想使程序运行需要删除下列代码。

    w = None
    def create_Toplevel1(rt, *args, **kwargs):
        '''Starting point when module is imported by another module.
           Correct form of call: 'create_Toplevel1(root, *args, **kwargs)' .'''
        global w, w_win, root
        #rt = root
        root = rt
        w = tk.Toplevel (root)
        top = Toplevel1 (w)
        1_support.init(w, top, *args, **kwargs)
        return (w, top)
    
    def destroy_Toplevel1():
        global w
        w.destroy()
        w = None
    

    最终代码为(经过测试可以直接运行的代码):

    import sys
    
    try:
        import Tkinter as tk
    except ImportError:
        import tkinter as tk
    
    try:
        import ttk
        py3 = False
    except ImportError:
        import tkinter.ttk as ttk
        py3 = True
    
    def vp_start_gui():
        '''Starting point when module is the main routine.'''
        global val, w, root
        root = tk.Tk()
        top = Toplevel1 (root)
        root.mainloop()
    
    class Toplevel1:
        def __init__(self, top=None):
            '''This class configures and populates the toplevel window.
               top is the toplevel containing window.'''
            _bgcolor = '#d9d9d9'  # X11 color: 'gray85'
            _fgcolor = '#000000'  # X11 color: 'black'
            _compcolor = '#d9d9d9' # X11 color: 'gray85'
            _ana1color = '#d9d9d9' # X11 color: 'gray85'
            _ana2color = '#ececec' # Closest X11 color: 'gray92'
    
            top.geometry("600x450+600+258")
            top.minsize(152, 1)
            top.maxsize(1924, 1055)
            top.resizable(1,  1)
            top.title("New Toplevel")
            top.configure(background="#d9d9d9")
    
            self.Button1 = tk.Button(top)
            self.Button1.place(relx=0.267, rely=0.2, height=53, width=153)
            self.Button1.configure(activebackground="#ececec")
            self.Button1.configure(activeforeground="#000000")
            self.Button1.configure(background="#d9d9d9")
            self.Button1.configure(disabledforeground="#a3a3a3")
            self.Button1.configure(foreground="#000000")
            self.Button1.configure(highlightbackground="#d9d9d9")
            self.Button1.configure(highlightcolor="black")
            self.Button1.configure(pady="0")
            self.Button1.configure(text='''设置python''')
    
            self.Label1 = tk.Label(top)
            self.Label1.place(relx=0.15, rely=0.489, height=86, width=265)
            self.Label1.configure(background="#d9d9d9")
            self.Label1.configure(disabledforeground="#a3a3a3")
            self.Label1.configure(foreground="#000000")
            self.Label1.configure(text='''Label''')
    
    if __name__ == '__main__':
        vp_start_gui()
    
    

    程序运行结果如下图所示:

    在这里插入图片描述
    感觉效果还不错,但是要想设计一些style的话我个人认为还是Pyqt方便(因为我以前使用QT多一些,对QT相对而言熟练)。其中一点要考虑的是Tkinter的很多教程在网上不容易搜到,官方文档有点晦涩,需要较强的英文理解能力,这方面在国外的教程很多,国内比较少。

    不过Tkinter做小的程序真的是很方便,代码比较简洁。

    另外最重要的是,这是python的标准库,兼容性没得说,兼容性很好。任何函数直接套就可以用。

    展开全文
  • python3的tkinter登录界面设计+mysql数据库的导入数据

    千次阅读 多人点赞 2019-08-16 09:17:14
    在上文中我只给了界面代码,注释了数据库部分的代码,本来想将数据可视化界面做好了再搞一个完整的登录和数据可视化界面的,但是由于有其它的事要做,所以就将之前的代码包装了一下,这样整段代码只包含三个函数...
  • 如何使用Python tkinter 设计登录界面 文章目录前言一、建立主窗口二、建立子控件1.Label标签控件与Entry输入控件2.效果展示 前言 提示:初步学习Python的同学可以尝试使用Python内置的tkinter库函数设计一些简单...
  • 简单python界面设计tkinter库) 这个界面初衷是为舵机做一个控制界面 下面为部分代码,全代码以及用到的资源文件见下面我的 GitHub 链接 """ 标题:机械臂界面 时间:2020.02.15 作者:Sunqk """ import ...
  • 本篇是简单的实例,用到的理论知识在上一篇:Python界面GUI学习路程之Tkinter之窗口交互设计 声名:文中所用代码运行环境:Window 10 64bit,Python 3.8 目录 1.获取文本框Entry中的内容 2.限制文本框的输入内容...
  • tkinter控制界面.zip

    2020-04-23 11:36:42
    代码是通过python中tkinter库进行简单界面设计,实现一个控制界面。利用单组件与多组件的布局与管理,包括按钮,文本框,背景等,能够对文本框中的数值进行对相关参数的自由调控。
  • 文章目录前言相关介绍一、函数方法介绍二、导入tkinter库三、窗口[1]. 创建[2].... 代码前言此篇文章介绍的是有关图形用户界面设计。使用到的库是,库在版本开始就是自带的库,IDLE就是通过这个库设...
  • 一个GUI应用程序有很多的组件,将这些组件有序美观地排布在窗口上,需要用Tkinter提供的布局管理器,tkinter提供了三种管理其:pack,grid和place. 下面这个代码是用grid来进行的布局管理。 在看代码之前介绍几个重要...
  • 采用pandas导入考试题库,通过tkinter设计界面,模拟上级考试答题过程,答题结果比对,正确率分析
  • 一、Tkinter的介绍和简单...由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。注意:Pyt...
  • 最近做毕业设计,两周自学python,做了一些简单的GUI界面,以下代码界面源码,明天文件打包EXE以下源码和运行界面展示:捕获.GIF捕获1.GIF捕获2.GIFwindow = tk.Tk()window.title("Welcome to RC4 and WEP change ...
  • 此工具是基于VB的一个插件,可以输出python的tk代码,依次安装... 这是一个VB6的ADDIN(外接程序),用于使用VB6开发工具直接拖放控件,直接可视化完成Python的TKinter的GUI布局和设计,可以在VB界面上设置 ...
  • 能够设计好看的图形界面,当选是tkinter模块啦,既然已经确定好模块,那么下面针对制作计算器界面,我们要考虑到流程,首先是需要2个位置的数字输入,一个数字位置的输出、还有加减号、等于号的制作,以及最重要的...
  • 不过说实在,使用Python开发GUI界面还是麻烦了一些了,自带的标准库Tkinter使用起来非常简单,不过对于习惯了VB拖放控件完成界面设计的同学来说,还是不够人性化。TK也有一个工具叫GUI Builder,不过它使用Layout...
  • 软件需求分析是软件开发的前期工作,是非常重要的一步,可以说至少占据了30%的重要性,然后软件结构的总体设计(软件架构)占据大概35%,或者更多一点,而代码的编写只占到10%,调试可能占20%,而其他方面仅仅占到5%...
  • 声名:文中所用代码运行环境:Window 10 64bit,Python 3.8目录1.获取文本框Entry中的内容from tkinter import *import tkinter as tkfrom tkinter import ttkdef close_window():global entryentry = E.get()print...
  • 1.代码:#导出模块import tkinter as tkfrom tkinter import messageboximport pickle#定义登录的窗口、标题、大小和位置window = tk.Tk()window.title('Welcome to Python')window.geometry('800x500+800+200')#...
  • .tkintertkinter是Python下面向tk的图形界面接口库,可以方便地进行...不足之处为缺少合适的可视化界面设计工具,需要通过代码来完成窗口设计和元素布局。Python tkinter实现图片标注代码代码如下所述:#!/usr/bin...
  • 本节我们综合一下前面学习过的组件,来制作一个串口工具的GUI界面,以此展开我们的Tkinter应用篇~ 二、创建标题和菜单栏 title可以创建标题,Menu组件可以创建一个多级菜单 代码实现: from tkinter import * root ...
  • 【声明】本文运行环境为... 本文所涉及代码,均为此环境下运行成功,仅供参考。 目录 一、引入所需模块 二、实例代码运用 2.1主窗口,即只有提示文字的弹出窗口-Label 2.2按钮Button 2.2.1不调用任何函数 ...
  • 说明:学习到的知识2.1 在tkinter中插入图片和设置图片运动的动画2.2 tkinter设计2.3 爬虫相关知识:爬取天气,并展示在tkinter的窗口上3.所用到的图片4.代码说明:4.1 导入模块:import timeimport urllib....
  • 说明:学习到的知识2.1 在tkinter中插入图片和设置图片运动的动画2.2 tkinter设计2.3 爬虫相关知识:爬取天气,并展示在tkinter的窗口上3.所用到的图片4.代码说明:4.1 导入模块:import timeimport urllib....
  • 该程序采用Python的tkinter图形用户界面(GUI)的形式。它必须在本地计算机上运行,​​并且需要可以通过pip下载的软件包,并且可以在application.py的import部分中找到该软件包。由于tkinter GUI的静态性质,因此不...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 215
精华内容 86
关键字:

tkinter界面设计代码