最近很多小伙伴都在问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 gui tkinter快速入门教程 | python tkinter tutorial
- Python GUI 编程 (Tkinter) 带滚动条的 Text
- python gui编程(tkinter)是什么?实例展示Python tkinter教程
- Python Tkinter Tk root.after延迟
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()
- 我做对了吗?有没有更好/更聪明的方法来实现此代码给我的输出?
- 为什么必须使用网格方法?(我尝试了放置方法,但是所有标签都没有出现在画布上。)
- 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
本文首发于个人博客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
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
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 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 是 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()
以上代码执行结果如下图:
以上就是python gui编程(tkinter)是什么?实例展示Python tkinter教程的详细内容,更多请关注php中文网其它相关文章!
Python 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变量计算它),所以我甚至没有在时间间隔内考虑它
解决方法
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延迟的相关知识,请在本站搜索。
本文标签: