小编Ski*_*eak的帖子

Python日志记录 - 将日期设置为文件名

我正在努力在我的Python项目中实现日志记录,并且遇到了一些障碍.我正在尝试设置我的日志记录,以便处理程序和格式化程序都组织到一个配置文件中.我现在要做的是设置我fileHandler将创建一个看起来像这样的日志文件:YYYY_MM_DD.log显然Y代表年份,M代表月份,D代表当天.

这是我尝试使用我的配置文件:

[loggers]
keys=root,MainLogger

[handlers]
keys=fileHandler, consoleHandler

[formatters]
keys=logFormatter, consoleFormatter

[logger_root]
level=DEBUG
handlers=fileHandler

[logger_MainLogger]
level=DEBUG
handlers=fileHandler, consoleHandler
qualname=MainLogger
propagate=0

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=consoleFormatter
args=(sys.stdout,)

[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=logFormatter
args=(datetime.now().strftime('%Y_%m_%d.log'), 'a')

[formatter_logFormatter]
format=%(asctime)s | %(levelname)-8s | %(lineno)04d | %(message)s

[formatter_consoleFormatter]
format=%(asctime)s | %(levelname)-8s | %(fillname)s-%(funcName)s-%(lineno)04d | %message)s
Run Code Online (Sandbox Code Playgroud)

我用来测试配置的文件非常简单:

import logging
import logging.config

logging.config.fileConfig('logging.conf')
logger = logging.getLogger('MainLogger')
logger.debug("TEST")
Run Code Online (Sandbox Code Playgroud)

我目前得到的具体错误是:

configparser.InterpolationSyntaxError: '%' must be followed by '%' or '(', found: "%Y_%m_%d.log'), 'a')"
Run Code Online (Sandbox Code Playgroud)

我已经尝试更改了%Y,%m并且%d正如错误所说,但这并不能解决问题.我如何设置配置文件,以便我的日志文件看起来像我想要的那样? …

python logging

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

Tkinter 检查哪个条目最后获得焦点

我正在开发一个程序,该程序具有使用 Tkinter 创建的虚拟键盘。启用键盘的页面具有用户需要输入数据的输入小部件。我使用pyautogui虚拟键盘的一部分来模拟键盘按下,但我的问题是当用户按下键盘上的任何按钮时聚焦的小部件。由于每个键盘按钮都是ttk.Button当他们按下按键时,该按钮具有焦点,而不是他们选择的输入小部件,他们试图将数据放入其中。

因此,现在我有运行按键的方法,在按键之前调用特定的小部件以成为焦点。这是我现在的代码:

import tkinter as tk
from tkinter import ttk
import pyautogui

def drawKeyboard(parent):

    keyboardFrame = tk.Frame(parent)
    keyboardFrame.pack()

    keys = [
        [ ("Alpha Keys"),
          [ ('q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'),
            (' ', 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'),
            ('capslock', 'z', 'x', 'c', 'v', 'b', 'n', 'm'),
            ('delete', 'backspace', 'home', 'end')
          ]
        ],
        [ ("Numeric Keys"),
          [ ('7', '8', '9'),
            ('4', '5', '6'),
            ('1', '2', '3'),
            (' …
Run Code Online (Sandbox Code Playgroud)

python tkinter

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

设置 tk.Frame 宽度和高度

因此,我正在创建一个 GUI,并且我正在尝试制作它,以便所有内容都能适当地显示在屏幕上。我已经绘制了我希望 GUI 的每个部分看起来像它的大小的粗略草图,所以我知道所有东西的粗略尺寸。

然而,我遇到的第一个问题是设置屏幕的左半部分。

所以左半由一个框架,我们将调用MainFrame,即由2架,我们会打电话LabelFrameButtonFrame

  • MainFrame 需要 385 像素宽,460 像素高。
  • LabelFrame 应该是 375 像素宽,115 像素高。
  • ButtonFrame 需要 375 像素宽,330 像素高。

我的问题是我不知道如何将这些尺寸设置为框架。

self.config(width = num, height = num)显然已经尝试用适当的值替换 num ,但这没有做任何事情。

我知道窗口本身有一种.geometry方法,但我无法找到 tk.Frame 的等效方法

python tkinter

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

TKinter GUI, how do I get Frames to correct size?

So here's the issue. I am programming a GUI using Python's TKinter, and I need the window to be a specific size. The release version of the program will have the screen settings as root.attributes("-fullscreen", True) so that it's fullscreen and the user won't be able to access any menus. Said screen will be an 800x480 tablet screen.

Obviously I am programming on a screen much bigger than 800x480, so when I create my tkinter window I am setting root.minsize("800x480") …

python user-interface tkinter

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

Python ConfigParser - 如果不存在则创建文件

所以我正在创建一个Python程序,它读取一个.ini文件来为主程序设置一些启动变量.我唯一的想法是,我希望程序在初始化时检查.ini文件是否存在,如果不存在,则使用一组默认值创建它.如果有人意外删除了该文件,那就是一种先发制人的错误修复方法.

我似乎无法找到任何关于如何做到这一点的例子,而且我对Python没有超级经验(只用它编程大约一周)所以我很感激任何帮助:)

编辑:经过进一步思考,我想进一步追求这一点.

我们假设文件确实存在.如何检查以确保它具有适当的部分?如果它没有相应的部分,我将如何删除文件或删除内容并重写文件的内容?

我试图用这个白痴证明:P

python config

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

从十六进制字符串中删除 0x

val1 = hex(100)
val2 = hex(50)
val3 = hex(int(val1, 16) - int(val2, 16))

hex_str = str(val1) + str(val2) + str(val3)

print(hex_str)
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我的最终目标是有一个看起来像这样的字符串: 643232

然而,目前我得到的结果的字符串为 0x640x320x32

Python中有没有办法0x从十六进制字符串的开头删除?

或者我是否必须使用正则表达式将其删除re.sub()

编辑:我还需要确保我总是得到太多的角色。因此,例如,如果我正在寻找 5 的十六进制值,我会得到05

python

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

日期列作为主键的一部分的优缺点

我目前正在研究一个数据库,其中需要一个日志来跟踪一堆不同的数据更改。诸如价格变化、项目状态变化等。为了实现这一点,我制作了不同的“日志”表来存储需要保留的数据。

举一个可靠的例子,为了跟踪需要订购的零件的价格变化,我创建了一个名为Part_Price_Log. 主键由修改零件价格的日期和Parts表中零件唯一 ID 的外键组成。

我的逻辑是,如果您需要查找零件的当前价格,您只需找到该零件 ID 的最新条目。但是,有人告诉我不要以这种方式实现它,因为使用 Date 作为主键的一部分是一种在数据中获取错误的简单方法。

所以我的问题是这样的。

使用日期列作为复合主键的一部分有什么优点/缺点?有哪些更好的选择?

sql database sql-server primary-key composite-primary-key

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

ttk按钮跨多列

我正在尝试制作一个跨框架内多列的TTK按钮。基本上,我有两排按钮,并且我希望两排下面的最后一个按钮跨越两排的宽度。

但是,我不确定如何实现这一目标。这是我在按钮上的代码:

btnOff = ttk.Button(self, text = "OFF", command = tc.Off).
                    grid(column = 1, row = 10, columnspan = 2, rowspan = 2)
Run Code Online (Sandbox Code Playgroud)

我尝试增加列宽,但似乎无济于事。实际上,即使我尝试正常设置它,它也比它上面一行中的其他按钮小,即使所有这些按钮的网格代码都与我上面发布的相同。

python tkinter button width ttk

2
推荐指数
1
解决办法
4239
查看次数

Tkinter Toplevel总是在前面

我正在使用一个使用tkinter TopLevel窗口的程序来定期向用户显示更新日志信息.我的问题是主程序是全屏的,所以无论何时打开日志窗口后它们与它进行交互,日志窗口都不可见,因为它现在位于主程序之后.

有没有办法强制Toplevel窗口(或实际上,任何Tkinter窗口)永久保持在所有其他窗口的顶部?

考虑这个快速设置,例如:

import tkinter as tk
from tkinter import ttk

class Example(tk.Frame):

    def __init__(self, master, *args, **kwargs):
        tk.Frame.__init__(self, master, *args, **kwargs)
        self.pack()
        btn = ttk.Button(self, text = "Press", command = self.openTopLevel)
        btn.pack()

    def openTopLevel(self):
        topLevelWindow = tk.Toplevel(self)

root = tk.Tk()
main = Example(root)
root.mainloop()
Run Code Online (Sandbox Code Playgroud)

当您按下按钮并打开Toplevel窗口时,它位于顶部.但是如果你抓住框架,移动它等等,Toplevel会支持它.我怎么阻止它?或者这不是Tkinter允许我做的事情吗?

python tkinter

2
推荐指数
1
解决办法
4547
查看次数

形参 ""@response"" 没有声明为 OUTPUT 参数,而是在请求的输出中传递的实参

是的,我见过这个问题。不,它没有解决我的问题。

我正在 VB.Net 中开发一个与 SQL Server 数据库接口的应用程序。目前我正在尝试让 VB.Net 应用程序在数据库上执行以下存储过程:

CREATE PROCEDURE dbo.AddSupplierAddress(
    @Supplier VARCHAR(100),
    @Street   VARCHAR(100),
    @City     VARCHAR(50),
    @Region   VARCHAR(50),
    @Code     VARCHAR(7),
    @Info     VARCHAR(500) = NULL,
    @response NVARCHAR(500) = OUTPUT
) AS
BEGIN
    DECLARE @SupplierID INT, @RegionID INT
    SELECT @SupplierID = supplier_id
      FROM suppliers
     WHERE supplier_name = @Supplier
    IF @SupplierID IS NULL
    BEGIN
        SET @response = 'Could not add address to Supplier "' + @Supplier + '".  Supplier does not exist.'
        RETURN
    END
    SELECT @RegionID = region_id
      FROM …
Run Code Online (Sandbox Code Playgroud)

vb.net sql-server output

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

Python 和变量作用域

所以我最近刚接触 Python,但我似乎能够编写一些东西并让它工作。然而,我一直在尝试扩展我对语言中事物如何工作的知识,而将这个简单的文件放在一起让我感到困惑。

class TestA:
    def __init__(self):
        self.varNum = 3

    def printNum(self):
        print(self.varNum)


class TestB:
    varNum = 0

    def __init__(self):
        varNum = 3

    def printNum(self):
        global varNum
        print(varNum)

a = TestA()
a.printNum()

b = TestB()
b.printNum()
Run Code Online (Sandbox Code Playgroud)

TestA将3 正确打印到屏幕的代码。然而,代码TestB却给了我NameError这样的说明:'varNum' is not defined。无论我是否有global varNum这条线,我都会收到该错误。

我想令我困惑的是我将该__init__函数视为类构造函数。当我使用 Java 或 C# 等语言进行编程时,我在构造函数之外声明了全局变量,以便它们的作用域是整个类。这不是 Python 中的东西吗?我编写的代码只是标记self.了所有内容,因为我只是想快速地将一些东西放在一起,但我现在正在尝试更多地了解该语言。self.Python 中创建类作用域变量的唯一方法是什么?或者还有其他方法吗?

谢谢你的时间 :)

python methods scope class class-variables

-1
推荐指数
1
解决办法
2906
查看次数