相关疑难解决方法(0)

构建tkinter应用程序的最佳方法

以下是我典型的python tkinter程序的整体结构.

def funA():
    def funA1():
        def funA12():
            # stuff

    def funA2():
        # stuff

def funB():
    def funB1():
        # stuff

    def funB2():
        # stuff

def funC():
    def funC1():
        # stuff

    def funC2():
        # stuff


root = tk.Tk()

button1 = tk.Button(root, command=funA)
button1.pack()
button2 = tk.Button(root, command=funB)
button2.pack()
button3 = tk.Button(root, command=funC)
button3.pack()
Run Code Online (Sandbox Code Playgroud)

funA funB当用户点击按钮1,2,3时,funC将显示Toplevel带有小部件的另一个窗口.

我想知道这是否是编写python tkinter程序的正确方法?当然,即使我这样写,它也会起作用,但这是最好的方法吗?这听起来很愚蠢但是当我看到其他人编写的代码时,他们的代码并没有被大量的函数弄乱,而且大多数都有类.

我们应该遵循哪些具体结构作为良好做法?在开始编写python程序之前我应该​​如何计划?

我知道编程中没有最佳实践,我也不是要求它.我只是想要一些建议和解释,让我保持正确的方向,因为我自己学习Python.

python tkinter

115
推荐指数
3
解决办法
12万
查看次数

如何从类中获取可变数据

这是一个较长的应用程序的缩写示例,其中我有多个小部件页面收集用户输入的信息.MyApp将每个页面实例化为一个类.在该示例中,PageTwo希望打印StringVar的值,该值存储来自PageOne中的Entry小部件的数据.我怎么做?我尝试过的每一次尝试都以一个或另一个例外结束.

from tkinter import *
from tkinter import ttk

class MyApp(Tk):

    def __init__(self):
        Tk.__init__(self)
        container = ttk.Frame(self)
        container.pack(side="top", fill="both", expand = True)
        self.frames = {}
        for F in (PageOne, PageTwo):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky = NSEW)
        self.show_frame(PageOne)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()


class PageOne(ttk.Frame):
    def __init__(self, parent, controller):
        ttk.Frame.__init__(self, parent)
        ttk.Label(self, text='PageOne').grid(padx=(20,20), pady=(20,20))
        self.make_widget(controller)

    def make_widget(self, controller):
        self.some_input = StringVar
        self.some_entry = ttk.Entry(self, textvariable=self.some_input, width=8) 
        self.some_entry.grid()
        button1 = ttk.Button(self, text='Next Page',
                                  command=lambda: …
Run Code Online (Sandbox Code Playgroud)

tkinter

8
推荐指数
1
解决办法
3798
查看次数

如何从tkinter中的不同类访问变量?

我一直在搜索很多,但我仍然不知道如何从python中的不同类中访问变量.在这种情况下,我想self.vPageOne类到PageTwo类访问变量.

这是我的代码.

import tkinter as tk
import smtplib

TITLE_FONT = ("Helvetica", 18, "bold")

class SampleApp(tk.Tk):

    def __init__(self):
        tk.Tk.__init__(self)

        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        for F in (StartPage, PageOne, PageTwo):
            frame = F(container, self)
            self.frames[F] = frame

            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(StartPage)

    def show_frame(self, c):
        frame = self.frames[c]
        frame.tkraise()

class StartPage(tk.Frame):

    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        label = tk.Label(self, text="PyMail",foreground = "Red", font=("Courier", 30, "bold"))
        label.pack(side="top")
        sublabel …
Run Code Online (Sandbox Code Playgroud)

python user-interface tkinter smtplib python-3.x

6
推荐指数
1
解决办法
1万
查看次数

Tkinter的!了解如何切换帧

我试图教我自己如何使用tkinter,我通过youtube发现了一个有用的代码,我并不完全理解.如果有人能帮助我理解它,我将不胜感激.标记我不理解的事情**

import tkinter as tk  # why not from tkinter import? **

class SampleApp(tk.Tk): tk.TK**

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        # the container is where we'll stack a bunch of frames
        # on top of each other, then the one we want visible
        # will be raised above the others

        container = tk.Frame(self) *
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        for F in (StartPage, PageOne, PageTwo):
            page_name = F.__name__
            frame = F(container, self) ** …
Run Code Online (Sandbox Code Playgroud)

tkinter python-3.x

6
推荐指数
1
解决办法
9302
查看次数

缩放 Tkinter 小部件

我正在使用 Tkinter 的“grid()”方法为我的 python 程序设计 GUI。

有没有办法让小部件随主窗口缩放?

这是一个简短的例子:

from Tkinter import *

master = Tk()

Label(master, text="This is a test").grid(row=0, column=0)

mytext1 = Text(master, width=30, height=5)
mytext1.grid(row=1, column=0)

mytext2 = Text(master, width=30, height=5)
mytext2.grid(row=3, column=0)

master.mainloop()
Run Code Online (Sandbox Code Playgroud)

我想做的是当主窗口的大小发生变化时,让小部件调整它们的大小。(对于如此小的 GUI,这没有问题,但是当有很多小部件时,这就变得可取了。)

任何帮助将不胜感激!

python grid tkinter

5
推荐指数
1
解决办法
1万
查看次数

了解Tkinter中的父级和控制器__init__

我想了解以下代码的含义:

class PageOne(tk.Frame):

    def __init__(self, parent, controller):
Run Code Online (Sandbox Code Playgroud)

什么是self,parentcontroller?这些工具的作用和范围是什么?

我相信在Java中self类似this,但有什么用?parentcontroller

稍后在代码流程中我可以看到:

button1 = tk.Button(self, text="Back to Home",
      command=lambda: controller.show_frame(StartPage))
Run Code Online (Sandbox Code Playgroud)

有一个已定义的函数被调用show_frame,但为什么控制器被用来调用这个函数?

python tkinter

5
推荐指数
1
解决办法
1万
查看次数

Python:如何将消息窗口小部件的文本更改为用户输入

所以我正在制作一个程序,要求用户输入一个值.我想通过消息小部件(或标签小部件)显示值,并在输入新输入时更新.

def Enter():
    s = v.get()
    print (v.get())

    e.delete(0, END)
    e.insert(0, "")

#Code, Code, Code
...

# Area To Enter Text
v = StringVar()
e = Entry(root, textvariable=v)
e.pack()

m = Message(root, text = "Your Input")
m.pack()

# Enter Button
b = Button(root, text="OK", command=Enter)
b.pack()
Run Code Online (Sandbox Code Playgroud)

有没有办法让v的变量替换Message Widget的文本?

注意:

如果我替换texttextvariable,则在按下每个字符键后更新文本,我需要在用户按下按钮时更新文本.


我的完整代码:

from tkinter import *
import os

# All Functions Below
def callback():
    print ("HI")

def Exit():
    os._exit(0)

def Enter():
    s = e.get()
    print (e.get())
    m.configure(text=s) …
Run Code Online (Sandbox Code Playgroud)

python tkinter

5
推荐指数
1
解决办法
2059
查看次数

如何在 tkinter 中显示数据框

我是 Python 的新手,甚至是 tkinter 的新手。

我使用了来自 stackoverflow 的代码(在 tkinter 中的两帧之间切换)来生成一个程序,根据用户选择的选项,在其中调用新帧并将其放置在彼此的顶部。我的代码的精简版本如下。还有很多帧。

import tkinter as tk                
from tkinter import font  as tkfont 
import pandas as pd

class My_GUI(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        self.title_font = tkfont.Font(family='Helvetica', size=18, weight="bold", slant="italic")


        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        for F in (StartPage, Page_2):
            page_name = F.__name__
            frame = F(parent=container, controller=self)
            self.frames[page_name] = frame


            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame("StartPage")

    def show_frame(self, page_name):
        '''Show a frame for …
Run Code Online (Sandbox Code Playgroud)

tkinter dataframe python-3.x

5
推荐指数
2
解决办法
3万
查看次数

在Python Tkinter中按下按钮后如何清除窗口?

我目前正在为python tkinter中的孩子们创建一个数学测验.在这个测验中,我有3个不同的"页面".测验结束时的起始页面,测验页面和分数页面.在我的开始页面中,我有三个不同的测验难度,用户可以选择.一旦点击"EASY"或"HARD"按钮,我如何从起始页面(例如我的标签和按钮)基本上清除窗口的元素,这样我就可以开始测验了?

python tkinter

5
推荐指数
1
解决办法
430
查看次数

Tkinter 框架调整大小

我已经被困了几天,试图弄清楚如何使用这种方法动态调整 TKInter 中的框架大小。

class SampleApp(tk.Tk):


    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        # the container is where we'll stack a bunch of frames
        # on top of each other, then the one we want visible
        # will be raised above the others
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}
        for F in (StartPage, PageOne, PageTwo):
            page_name = F.__name__
            frame = F(container, self)
            self.frames[page_name] = frame

            # put all of the pages in the same …
Run Code Online (Sandbox Code Playgroud)

python user-interface tkinter

4
推荐指数
1
解决办法
8562
查看次数

标签 统计

tkinter ×10

python ×7

python-3.x ×3

user-interface ×2

dataframe ×1

grid ×1

smtplib ×1