- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图熟悉 python GUI,因此为了做到这一点,我正在构建一个简单的计算器。它的大部分工作正常,但是当我使用以下代码时,我正在尝试向我的文本显示小部件添加一个滚动条:
self.scroll_bar = ttk.Scrollbar(self.master)
self.scroll_bar.pack(side=tk.RIGHT, fill=tk.Y)
# self.scroll_bar.grid(row=0, column=4)
self.screen = tk.Text(self.master, height=5, width=30)
# self.screen.grid(row=0, column=0, columnspan=4)
self.screen.pack(side=tk.LEFT, fill=tk.BOTH)
self.screen.configure(font=("Calibri", 20, "bold", "italic"),
foreground="black", background="whitesmoke")
self.scroll_bar.config(command=self.screen.yview, orient=tk.VERTICAL)
self.screen.config(yscrollcommand=self.scroll_bar.set)
GUI 甚至没有打开,而当我删除 pack() 行并使用网格时它可以工作但看起来极不平衡。
我的再现性完整代码是:
import tkinter as tk
from tkinter import ttk
import re
# the calculator gui text for the buttons
calculator_button_text = {
'clear': 'C',
'zero': '0',
'one': '1',
'two': '2',
'three': '3',
'four': '4',
'five': '5',
'six': '6',
'seven': '7',
'eight': '8',
'nine': '9',
'decimal': '.',
'plus': '+',
'minus': '-',
'multiply': 'x',
'divide': u"\u00F7",
'equal': '=',
'delete': u"\u232B"
}
class CalculatorApp(tk.Frame):
''' Main Calculator Class '''
def __init__(self, master):
tk.Frame.__init__(self, master)
self.master = master
self.user_in_list = []
self.buttons_text = calculator_button_text
self.equation = ""
self.configure_gui()
self.create_calc_widgets()
# in order to change the button colors (mac)
style = ttk.Style(self.master)
style.theme_use('clam')
style.configure('style.TButton', foreground="firebrick", background="darkgrey",
font=("Arial", 20, "bold", "italic"))
style.map('TButton',
foreground=[('pressed', 'blue'),
('active', 'darkgreen')],
background=[('pressed', 'dimgrey'),
('active', 'grey')])
def configure_gui(self):
self.master.title("Calculator")
self.master.configure(bg='black')
def create_calc_widgets(self):
self.create_input_field()
self.create_buttons()
def create_input_field(self):
## this work without scrollbar
# self.screen = tk.Text(self.master, height=5, width=30)
# self.screen.grid(row=0, column=0, columnspan=4, sticky=tk.W + tk.E)
# self.screen.configure(font=("Calibri", 20, "bold", "italic"),
# foreground="black", background="whitesmoke")
self.scroll_bar = ttk.Scrollbar(self.master)
self.scroll_bar.pack(side=tk.RIGHT, fill=tk.Y)
# self.scroll_bar.grid(row=0, column=4)
self.screen = tk.Text(self.master, height=5, width=30)
# self.screen.grid(row=0, column=0, columnspan=4)
self.screen.pack(side=tk.LEFT, fill=tk.BOTH)
self.screen.configure(font=("Calibri", 20, "bold", "italic"),
foreground="black", background="whitesmoke")
self.scroll_bar.config(command=self.screen.yview, orient=tk.VERTICAL)
self.screen.config(yscrollcommand=self.scroll_bar.set)
def create_buttons(self):
button_col = 0
button_row = 1
text_in_row = ('C', '123d', '456-', '789x', '0.+/', '=')
for row in text_in_row:
for text in row:
self.configure_button(text, button_row, button_col)
button_col += 1
button_col = 0
button_row += 1
def configure_button(self, txt, r, c):
to_write = (txt == '=')
# if txt in ('0123456789'):
# value = int(txt)
if (txt == 'd'):
txt = u"\u232B"
elif (txt == '/'):
txt = u"\u00F7"
key = list(calculator_button_text.keys())[
list(calculator_button_text.values()).index(txt)
]
calculator_button_text[key] = ttk.Button(self.master, text=txt,
style='style.TButton',
command=lambda: self.click(txt, to_write))
calculator_button_text[key].grid(row=r, column=c, ipady=10, ipadx=10)
if (key=='clear'):
self.configure_clear_button(key)
elif (key=='equal'):
self.configure_equal_button(key)
def configure_clear_button(self, k):
calculator_button_text[k].grid(columnspan=4, sticky=tk.W + tk.E)
def configure_equal_button(self, k):
calculator_button_text[k].grid(columnspan=4, sticky=tk.W + tk.E)
def click(self, cmd, new_line):
if (cmd != '='):
self.display_on_screen(cmd, new_line)
else:
self.equation = re.sub(u"\u00F7", '/', self.equation)
self.equation = re.sub("x", '*', self.equation)
ans = str(eval(self.equation))
self.display_on_screen(ans, new_line)
self.equation = ""
def display_on_screen(self, val, new_line=False):
if (not new_line):
self.screen.insert(tk.END, val)
self.equation += str(val)
else:
self.screen.insert(tk.END, '\n')
self.screen.insert(tk.END, val)
self.screen.insert(tk.END, '\n')
self.screen.yview('end')
def clear_screen(self):
# set equation to empty before deleting screen
self.equation = ""
self.screen.delete('1.0', tk.END)
if __name__ == '__main__':
root = tk.Tk()
calc_gui = CalculatorApp(root)
# Make window fixed (cannot be resized)
root.resizable(width=False, height=False)
root.mainloop()
我会提到我在 MacOS Mojave 上使用 python 3.X,并且我遇到了按钮颜色的问题所以最终我从 tk.Button()
到 ttk.Button()
希望得到一些帮助
最佳答案
确实,几何管理器不能在同一部分混合使用 pack
和 grid
。因此,您必须选择一种模式来组织窗口的布局,或者将窗口拆分为 2 个框架,以便能够将 pack
小部件放在一个框架中,将 grid
控件放在另一个框架中。
您可以尝试以下方法:
self.screen = tk.Text(self.master, height=5, width=30)
self.screen.grid(row=0, column=0, columnspan=4, sticky='nswe')
self.scroll_bar = ttk.Scrollbar(self.master, command=self.screen.yview)
self.scroll_bar.grid(row=0, column=3, sticky='nse')
关于python - Tkinter.pack() 方法不显示 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58038099/
我在运行 git gc --prune=now 并得到结果 Counting objects: 100% (619263/619263), done. Delta compression using
我想获取某个类中的所有链接。 HTML 的一个例子是 ES M3 E-mini S&P500 June 2013
我正在 32 位 ARM mcu(Atmel SAM4SD32C,Cortex-M4/ARMv7E-M 部件)上实现二进制日志记录系统,并且正在设计我的数据结构。我的目标是将日志格式描述为一个压缩结构
以下测试代码: [Test] public void PossibleHtmlAgilityPackBug() { const string html = @""; var doc =
如何利用 D3 圆包布局来得到类似这样的图表: (即使有更细长的椭圆)? 这种图表样式的关键应用是更容易放置标签。 这是 jsfiddle这演示了我为其他目的制作的圆包,但我想对于任何想要试验和测试涉
在 C 语言中,编译器将按照声明的顺序排列结构成员,并在成员之间或最后一个成员之后插入可能的填充字节,以确保每个成员都正确对齐。 gcc 提供了一个语言扩展,__attribute__((packed
在 C 语言中,编译器将按照声明的顺序排列结构成员,并在成员之间或最后一个成员之后插入可能的填充字节,以确保每个成员都正确对齐。 gcc 提供了一个语言扩展,__attribute__((packed
在我正在处理的 WPF 应用程序中尝试使用合并的 ResourceDictionaries 解决问题时,我遇到了这个奇怪的问题。 我在外部 DLL(“通用”)中定义了自定义控件(TextButton、
在使用 webpack、webpacker gem 和 Rails 5.1 时,我注意到第一次运行 rspec 会生成 public/packs 和 public/packs-test 。 这些目录是
给定一个 HTML 文档,我想识别文档中的所有数字并在数字周围添加自定义标签。现在,我使用以下内容: HtmlNodeCollection bodyNode = htmlDoc.DocumentNod
我正在尝试使用 #pragma pack (n) 对齐数据成员.以下面为例: #include using namespace std; #pragma pack(8) // or (16) str
我正在尝试让 Html Agility Pack 在我的情况下工作。我需要检测现有 HTML 页面中的所有脚本元素并删除它们,将更改保存到另一个文件。在这里,bodyNode 返回正确数量的脚本标签,
我正在使用 GitLab,需要创建一个 .gitlab-ci.yml 脚本来为生成 nuGet 包的项目运行持续集成管道。 我在寻找可靠的文档来回答这个问题时遇到严重问题: 我应该使用 dotnet
我一直在尝试查找这个问题,但没有找到有效的解决方案。我的编译器忽略了#pragma pack(push) #pragma pack(2) 和 __ attribute __ ((aligned (2)
我正在尝试在 Ubuntu 10.10 上使用 Solaris Studio for Linux。 当我尝试构建以下代码时, const char * 名称 [] = { "苹果", "橙子", "芒
我正在尝试从 HTML 中删除不必要的内容。具体来说,我想删除评论。我找到了一个很好的解决方案( Grabbing meta-tags and comments using HTML Agility
我正在VHDL中的一个项目上工作,我需要从开关中获取4位输入,并根据其他开关的值向右或向左移动一定数量的位,该按钮需要在向右/向左移位之间切换。但是,当我尝试在Xilinx ISE中实现代码时,出现以
我有一台具有 SSH 访问权限的服务器,我想在那里放置一个 Git 源代码库。我刚刚在本地创建了一个 --bare --shared 存储库并将其复制到每个 SCP 的服务器。现在我想根据 SSH u
-moz-box-pack(或 box-pack)的 justify 属性似乎在 Firefox 中被忽略了。 Live example从我们的网站。每行中的数字应该右对齐,它们在 Chrome 中也
这是我的代码。我想知道如何“正确地”读取 BMP 文件,然后在不强制打包结构的情况下读取 header 值。 typedef struct __attribute__((packed)){ uint8
我是一名优秀的程序员,十分优秀!