GVKun编程网logo

Python-Tkinter滚动条框架(python tkinter frame滚动条)

6

最近很多小伙伴都在问Python-Tkinter滚动条框架和pythontkinterframe滚动条这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展pythonguitkinte

最近很多小伙伴都在问Python-Tkinter滚动条框架python tkinter frame滚动条这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展python gui tkinter快速入门教程 | python tkinter tutorial、Python GUI 编程 (Tkinter) 带滚动条的 Text、python gui编程(tkinter)是什么?实例展示Python tkinter教程、Python Tkinter Tk root.after延迟等相关知识,下面开始了哦!

本文目录一览:

Python-Tkinter滚动条框架(python tkinter frame滚动条)

Python-Tkinter滚动条框架(python tkinter frame滚动条)

我的目标是向具有多个标签的框架添加垂直滚动条。一旦框架内的标签超过框架的高度,滚动条应自动启用。搜索之后,我发现了这个有用的帖子。根据该帖子,我了解到要实现我想要的功能(如果我错了,请纠正我,我是一个初学者),我必须先创建一个Frame,然后Canvas在该框架内创建一个并将滚动条粘贴到该框架上好。之后,创建另一个框架并将其作为窗口对象放在画布内。所以,我终于想出了这个:

from Tkinter import *def data():    for i in range(50):       Label(frame,text=i).grid(row=i,column=0)       Label(frame,text="my text"+str(i)).grid(row=i,column=1)       Label(frame,text="..........").grid(row=i,column=2)def myfunction(event):    canvas.configure(scrollregion=canvas.bbox("all"),width=200,height=200)root=Tk()sizex = 800sizey = 600posx  = 100posy  = 100root.wm_geometry("%dx%d+%d+%d" % (sizex, sizey, posx, posy))myframe=Frame(root,relief=GROOVE,width=50,height=100,bd=1)myframe.place(x=10,y=10)canvas=Canvas(myframe)frame=Frame(canvas)myscrollbar=Scrollbar(myframe,orient="vertical",command=canvas.yview)canvas.configure(yscrollcommand=myscrollbar.set)myscrollbar.pack(side="right",fill="y")canvas.pack(side="left")canvas.create_window((0,0),window=frame,anchor=''nw'')frame.bind("<Configure>",myfunction)data()root.mainloop()
  1. 我做对了吗?有没有更好/更聪明的方法来实现此代码给我的输出?
  2. 为什么必须使用网格方法?(我尝试了放置方法,但是所有标签都没有出现在画布上。)
  3. anchor=’nw’在画布上创建窗口时使用的特别之处是什么?
    我是初学者,请保持简单的答案。

答案1

小编典典

请注意,建议的代码仅适用于Python 2

这是一个例子:

from Tkinter import *   # from x import * is bad practicefrom ttk import *# http://tkinter.unpythonic.net/wiki/VerticalScrolledFrameclass VerticalScrolledFrame(Frame):    """A pure Tkinter scrollable frame that actually works!    * Use the ''interior'' attribute to place widgets inside the scrollable frame    * Construct and pack/place/grid normally    * This frame only allows vertical scrolling    """    def __init__(self, parent, *args, **kw):        Frame.__init__(self, parent, *args, **kw)                    # create a canvas object and a vertical scrollbar for scrolling it        vscrollbar = Scrollbar(self, orient=VERTICAL)        vscrollbar.pack(fill=Y, side=RIGHT, expand=FALSE)        canvas = Canvas(self, bd=0, highlightthickness=0,                        yscrollcommand=vscrollbar.set)        canvas.pack(side=LEFT, fill=BOTH, expand=TRUE)        vscrollbar.config(command=canvas.yview)        # reset the view        canvas.xview_moveto(0)        canvas.yview_moveto(0)        # create a frame inside the canvas which will be scrolled with it        self.interior = interior = Frame(canvas)        interior_id = canvas.create_window(0, 0, window=interior,                                           anchor=NW)        # track changes to the canvas and frame width and sync them,        # also updating the scrollbar        def _configure_interior(event):            # update the scrollbars to match the size of the inner frame            size = (interior.winfo_reqwidth(), interior.winfo_reqheight())            canvas.config(scrollregion="0 0 %s %s" % size)            if interior.winfo_reqwidth() != canvas.winfo_width():                # update the canvas''s width to fit the inner frame                canvas.config(width=interior.winfo_reqwidth())        interior.bind(''<Configure>'', _configure_interior)        def _configure_canvas(event):            if interior.winfo_reqwidth() != canvas.winfo_width():                # update the inner frame''s width to fill the canvas                canvas.itemconfigure(interior_id, width=canvas.winfo_width())        canvas.bind(''<Configure>'', _configure_canvas)if __name__ == "__main__":    class SampleApp(Tk):        def __init__(self, *args, **kwargs):            root = Tk.__init__(self, *args, **kwargs)            self.frame = VerticalScrolledFrame(root)            self.frame.pack()            self.label = Label(text="Shrink the window to activate the scrollbar.")            self.label.pack()            buttons = []            for i in range(10):                buttons.append(Button(self.frame.interior, text="Button " + str(i)))                buttons[-1].pack()    app = SampleApp()    app.mainloop()

它尚未将鼠标滚轮绑定到滚动条,但是可以的。但是,使用滚轮滚动可能会有些颠簸。

编辑:

到1)
恕我直言,滚动帧在Tkinter中有些棘手,而且似乎做得并不多。似乎没有优雅的方法可以做到这一点。
代码的一个问题是你必须手动设置画布大小-这就是我发布的示例代码所解决的问题。

至2)
你在谈论数据功能?Place也对我有用。(总的来说,我更喜欢网格)。

到3)
好吧,它将窗口放置在画布上。

我注意到的一件事是,你的示例默认情况下会处理鼠标滚轮滚动,而我发布的示例则不会。一定要看一下。

python gui tkinter快速入门教程 | python tkinter tutorial

python gui tkinter快速入门教程 | python tkinter tutorial

本文首发于个人博客https://kezunlin.me/post/d5c57f56/,欢迎阅读最新内容!

python tkinter tutorial
<!--more-->

Guide

main ui

messagebox
- showinfo()
- showwarning()
- showerror()
- askquestion()
- askokcancel()
- askyesno()
- askretrycancel()
- askyesnocancel()


filedialog
- asksaveasfilename() 
- asksaveasfile()
- askopenfilename()
- askopenfile()
- askdirectory()
- askopenfilenames()
- askopenfiles()

demo


from numpy.random import seed, uniform
from numpy import uint8, uint16, load, save

from cv2 import imread, imwrite
from os import listdir, makedirs
from os.path import exists, basename

# for python 3
from tkinter import Tk, Frame, messagebox, filedialog, Button, Label, StringVar

class MyGUI():
    def __init__(self):

        self.root = Tk()

        sw = self.root.winfo_screenwidth()
        sh = self.root.winfo_screenheight()
       
        ww = 700
        wh = 200
        x = (sw-ww) / 2
        y = (sh-wh) / 2
        self.root.title(''Image Compress Tool'')
        # center
        self.root.geometry("%dx%d+%d+%d" % (ww, wh, x, y))

        # frame1
        frame1 = Frame(self.root) 
        frame1.grid(row=0, column=0, sticky=''w'')

        self.input_btn = Button(frame1, text="Input Folder", width=10, height=3, command=self.set_input_folder)
        self.input_btn.pack(side=''left'')

        self.input_label_text = StringVar()
        self.input_label_text.set("Input Folder")

        self.input_label = Label(frame1, textvariable=self.input_label_text, width=70, height=3)
        self.input_label.pack(side=''left'') 

        # frame2
        frame2 = Frame(self.root) 
        frame2.grid(row=1, column=0, sticky=''w'')
        
        self.output_btn = Button(frame2, text="Output Folder", width=10, height=3, command=self.set_output_folder)
        self.output_btn.pack(side=''left'')

        self.output_label_text = StringVar()
        self.output_label_text.set("Output Folder")

        self.output_label = Label(frame2, textvariable = self.output_label_text, width=70, height=3)
        self.output_label.pack(side=''left'') 

        # frame3
        frame3 = Frame(self.root)
        frame3.grid(row=2, column=0, sticky=''nw'')
        
        self.run_btn = Button(frame3, text="执行加密", width=10, height=3, command=self.run_task)
        self.run_btn.pack(side=''left'')

        self.run_label_text = StringVar()
        self.run_label_text.set("Ready")

        self.run_label = Label(frame3, textvariable = self.run_label_text, width=70, height=3)
        self.run_label.pack(side=''left'') 

    def mainloop(self):
        self.root.mainloop() 

    def set_input_folder(self):
        result = filedialog.askdirectory()
        self.input_label_text.set(result)
        
    def set_output_folder(self):
        result = filedialog.askdirectory()
        self.output_label_text.set(result)
    
    def run_task(self):
        input_folder = self.input_label_text.get()
        output_folder = self.output_label_text.get()
        #print("input_folder: "+input_folder)
        #print("output_folder: "+output_folder)
        if exists(input_folder):
            #batch_compress(input_folder, output_folder)
            self.run_label_text.set("Compress OK.")
            messagebox.showinfo("Info", "Compress OK.")
        else:
            messagebox.showwarning("Warn", "Please input folder")

def gui():
    app = MyGUI()
    app.mainloop()

def main():
    gui()

if __name__ =="__main__":
    main()

snapshots
tkinter demo

Reference

  • tkinter demo
  • tkinter docs

History

  • 20190411: created.

Copyright

  • Post author: kezunlin
  • Post link: https://kezunlin.me/post/d5c57f56/
  • Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

Python GUI 编程 (Tkinter) 带滚动条的 Text

Python GUI 编程 (Tkinter) 带滚动条的 Text

import tkinter

#创建主窗口
win = tkinter.Tk()
#设置标题
win.title("sunck")
#设置大小和位置
#win.geometry("400x400+200+20")

''''''
文本控件,用于显示多行文本
''''''
#创建滚动条
scroll = tkinter.Scrollbar()
text = tkinter.Text(win, width=50, height=8)
#side放到窗体的那一侧 fill填充
scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
text.pack(side=tkinter.LEFT, fill=tkinter.Y)
#关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)

str = ''''''If there is anyone out there who still doubts that America is a place where all things are possible, who still wonders if the dream of our founders is alive in our time, who still questions the power of our democracy, tonight is your answerIt’s the answer told by lines that stretched around schools and churches in numbers this nation has never seen, by people who waited three hours and four hours, many for the first time in their lives, because they believed that this time must be different, that their voices could be that difference.''''''
text.insert(tkinter.INSERT, str)

win.mainloop()

python gui编程(tkinter)是什么?实例展示Python tkinter教程

python gui编程(tkinter)是什么?实例展示Python tkinter教程

之前的文章我们学习了python cgi编程,这篇文章我们就来介绍python gui编程(tkinter)并附上python tkinter教程。
python 提供了多个图形开发界面的库,几个常用 python gui 库如下:

Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows 和 Macintosh 系统里。Tk8.0 的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。

wxPython:wxPython 是一款开源软件,是 Python 语言的一套优秀的 GUI 图形库,允许 Python 程序员很方便的创建完整的、功能健全的 GUI 用户界面。

Jython:Jython 程序可以和 Java 无缝集成。除了一些标准模块,Jython 使用 Java 的模块。Jython 几乎拥有标准的Python 中不依赖于 C 语言的全部模块。比如,Jython 的用户界面将使用 Swing,AWT或者 SWT。Jython 可以被动态或静态地编译成 Java 字节码。

Tkinter 编程

Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。

立即学习“Python免费学习笔记(深入)”;

由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。

import tkinter
登录后复制

创建一个GUI程序

1、导入 Tkinter 模块

2、创建控件

3、指定这个控件的 master, 即这个控件属于哪一个

4、告诉 GM(geometry manager) 有一个控件产生了。

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import Tkinter
top = Tkinter.Tk()
# 进入消息循环
top.mainloop()
登录后复制

以上代码执行结果如下图:

tkwindow.jpg

以上就是python gui编程(tkinter)是什么?实例展示Python tkinter教程的详细内容,更多请关注php中文网其它相关文章!

Python Tkinter Tk root.after延迟

Python Tkinter Tk root.after延迟

我正在尝试使用tkinter做一个国际象棋时钟,为此我正在使用tkinter类Tk中的root.after方法.当程序启动时,它运行得很好,但一段时间后,时钟开始变慢和慢,但如果我开始摇动我的鼠标,时钟开始再次快速运行.对于时钟,时间精度至关重要,因此我无法以现在正在运行的方式运行程序.我怎么解决这个问题?

def runclock(self):
        """
        Method that runs and change the clock info
        """
        #t0 = time.time()

        if self.playing:
            #Time remaining in milliseconds
            clock = self.clock


            minutes = clock//60000
            clock %= 60000

            sec = clock//1000
            clock %= 1000

            mil = clock//10

            #If the turn is of player 1
            if self.turn == 1:
                self.WriteClock(self.canvas1,self.play1,"%.2i:%.2i:%.2i"%(minutes,sec,mil))
            else:
                self.WriteClock(self.canvas2,self.play2,mil))

            #tf = time.time()

            #deltat = (tf - t0)

            #s = 1 - deltat

            self.rel -= 1

            #if s > 0:
            #    time.sleep(s/1000)
            #else:
            #    self.rel += s*1000

            self.root.after(1,self.runclock)

注意:运行该函数的时间非常短(您可以使用注释的tf和t0变量计算它),所以我甚至没有在时间间隔内考虑它

解决方法

正如Brian指出的那样,减少时间间隔可能是解决问题的最简单方法.或者,您可以尝试在其自己的线程上单独运行您的计时器并让它以异步方式运行并发送线程事件,如下所述:

Python threading.timer – repeat function every ‘n’ seconds

今天关于Python-Tkinter滚动条框架python tkinter frame滚动条的讲解已经结束,谢谢您的阅读,如果想了解更多关于python gui tkinter快速入门教程 | python tkinter tutorial、Python GUI 编程 (Tkinter) 带滚动条的 Text、python gui编程(tkinter)是什么?实例展示Python tkinter教程、Python Tkinter Tk root.after延迟的相关知识,请在本站搜索。

本文标签: